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

时间:2012-08-09 20:17:00

标签: c# asp.net

我无法返回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 ?;
    }
}

7 个答案:

答案 0 :(得分:5)

改为使用Nullable<HList>

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

答案 1 :(得分:4)

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

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

使用特殊值:

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

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

返回bool

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

答案 2 :(得分:1)

如果方法的输入真正不应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;
}

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

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

答案 3 :(得分:0)

您有几个选择:

如果HList是结构:

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

答案 4 :(得分:0)

您可能需要查看Nullable of T

答案 5 :(得分:0)

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

与EventArgs.Empty相似

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

答案 6 :(得分:0)

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

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

或者,你可以这样做

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

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

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
}