Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果字符串在c中有null或空格,如何返回false#_C#_Asp.net - Fatal编程技术网

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

C# 如果字符串在c中有null或空格,如何返回false#,c#,asp.net,C#,Asp.net,我不能返回null,因为我的Hlist是不可为null的类型。我还可以返回什么来代替null HList findHListentry(string letter) { if (string.IsNullOrWhiteSpace(letter)) { HList result = listentry.Find(delegate(HList bk) { return

我不能返回null,因为我的
Hlist
是不可为null的类型。我还可以返回什么来代替null

HList findHListentry(string letter)
{
    if (string.IsNullOrWhiteSpace(letter))
    {
        HList result = listentry.Find(delegate(HList bk)
                       {
                           return bk.letter == letter;
                       });
        return result;
    }
    else
    {
        return ?;
    }
}
是否改为使用可为空的

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

您有几个选择:

如果
HList
是一个结构:

  • 把它做成一个班级。然后可以返回null
  • 将方法签名更改为
    HList?FindListentry(字符串字母)

  • 您可能需要研究处理不可为null的值类型的几种方法:

    • 使用
      Nullable
      (缩写为
      HList?
      ),或
    • 定义“空”的
      HList
      条目,类似于Microsoft为
      Guid
    • 使您的方法返回
      bool
      而不是
      HList
      ,并通过
      out
      参数返回
      HList
      ,方法在
      字典中执行。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;
    }
    
    (请注意,我还颠倒了条件逻辑,因为它听起来像是在寻找问题标题的反面。)


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

    如果不想返回null,可以创建HList的静态实例,用于指示它是“空”值

    类似于EventArgs.Empty


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

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

    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
    }
    

    如果
    HList
    是值类型,可以将其设置为可为空的值类型吗
    HList?
    ?有点相关:根据问题标题,我认为您的if条件逻辑混淆了。为了更简单的语法,您可以使用lamba而不是委托:
    return listEntry.Find(bk=>bk.letter==letter)您可以控制HList的定义吗?如果没有,您可以使用自己的类定义包装它,并添加一个“isNull”属性。或者,如果有一个HList值,您知道它永远不会自然出现,那么将它的只读实例初始化为sentinel null值(有点像DbNull)。下面的答案很好,但真正重要的是调用它时会发生什么-返回值如何处理?