繁体   English   中英

如果字符串在c#中有空或空格,如何返回false

[英]how to return false if string has null or white space in c#

我不能返回null,因为我的Hlist是一个不可为空的类型。 还有什么我可以在null的地方返回?

HList findHListentry(string letter)
{
    if (string.IsNullOrWhiteSpace(letter))
    {
        HList result = listentry.Find(delegate(HList bk)
                       {
                           return bk.letter == letter;
                       });
        return result;
    }
    else
    {
        return ?;
    }
}

使用Nullable<HList>代替?

HList? findHListentry(string letter)
{
    ///
    return null;
}

有几种处理非可空值类型的方法:

  • 使用Nullable<HList> (它的简写名称是HList? ),或
  • 定义一个“空” HList条目,类似于Microsoft为Guid定义一个条目
  • 让你的方法返回bool而不是HList ,并通过out参数返回HList ,就像在Dictionary.TryGetValue完成它一样。

使用特殊值:

struct HList {
    public static HList Empty;
    ...
}

if (...) {
    return HList.Empty;
}

回归bool

bool findHListentry(string letter, out HList res) {
    ...
}

如果方法的输入真的不应null或空字符串,则可能抛出异常:

HList findHListentry(string letter)
{
    if (string.IsNullOrWhiteSpace(letter))
        throw new ArgumentNullException("letter");

    HList result = listentry.Find(
        delegate(HList bk)
        {
            return bk.letter == letter;
        }
    );

    return result;
}

(请注意,我也颠倒了条件逻辑,因为它听起来像是在寻找与问题标题相反的东西。)

您还可以查看代码约定以验证方法的前提条件,而不是手动检查输入并抛出异常。

你有几个选择:

如果HList是结构:

  1. 使它成为一个类intead。 然后你可以返回null。
  2. 将方法签名更改为HList? findHListentry(string letter) HList? findHListentry(string letter)

你可能想看看N的Nullable

如果您不想返回null,则可以创建一个HList的静态实例,用于表示它是一个“空”值。

与EventArgs.Empty类似

public static readonly HList EmptyHList = new Hlist() { /* initialise */ };

一种实现是提供非可空类型的Empty实例,并返回该实例以代替null。 以字符串为例......虽然String是.NET中的可空类型,但它包含一个名为Empty的内置只读字段,因此使用String可以执行以下操作:

if(mystring == null)
{
    //My String Is Null
}

或者,你可以做到这一点

if(mystring == String.Empty)
{
    //My String is Empty
}

虽然它可能不是最好的方法,但您可以在类/结构中添加一个空的HList实例。 例如

HList findHListentry(string letter)
{
    if (string.IsNullOrWhiteSpace(letter))
    {
        HList result = listentry.Find(delegate(HList bk) { return bk.letter == letter; });
        return result;
    }
    else
    {
        return HList.Empty;
    }
}

public struct HList
{
    public const HList Empty;
}

现在你可以用null代替它

if(myHList == HList.Empty)
{
    //My HList is Empty
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM