代码之家  ›  专栏  ›  技术社区  ›  MojoFilter

这两种类型有什么区别吗?和可为空的<type>?

  •  51
  • MojoFilter  · 技术社区  · 16 年前

    在C#中是可为空的基元类型(即。 bool? )只是对应的别名 Nullable<T>

    9 回复  |  直到 8 年前
        1
  •  67
  •   akjoshi HCP    13 年前

    如果你看IL使用 Ildasm Nullable<bool> .

        2
  •  38
  •   samjudson    16 年前

    bool? b = null Nullable<bool> b = null . 这个 ? 就是C#编译器语法糖。

        3
  •  18
  •   Mark Ingram    16 年前

    bool? myValue = true;
    bool hasValue = false;
    
    if (myValue.HasValue && myValue.Value)
    {
      hasValue = true;
    }
    

    注意,你不能只做:

    if (myValue)
    {
      hasValue = true;
    }
    
        4
  •  9
  •   svick Raja Nadar    11 年前

    我感到惊讶的是,还没有人找到源代码(C#spec)。根据§4.1.10可为空的类型:

    可为空的类型写为T?,其中T是基础类型。此语法是System.Nullable<T>,这两种形式可以互换使用。

    所以,不,这两种形式没有任何区别。(假设您没有任何其他类型的调用 Nullable<T> 在您使用的任何名称空间中。)

        5
  •  6
  •   Curt Hagenlocher    16 年前

    Nullable<T> 是由一个T和一个指示T是否有效的位标志组成的结构。A. Nullable<bool> 有三个可能的值:true、false和null。

    啊,我忽略了一个事实,即“bool”后面的问号实际上是类型名称的一部分,而不是你在问问题的指示器:)。那么,你的问题的答案是“是的,C# bool?

        6
  •  4
  •   spoulson    16 年前

    A. bool 是值类型,因此不能包含空值。如果将任何值类型包装为 Nullable<> ,它将赋予它这种能力。此外,值的访问方法通过附加属性进行更改 HasValue Value

    但问题是: Nullable<bool> bool?

        7
  •  2
  •   morechilli    16 年前

    不,没有区别。总之:

    系统布尔->有效值:true、false

    可为空<布尔>-&燃气轮机;有效值:true、false、null

    布尔-&燃气轮机;可为null的别名<布尔>

    希望这有帮助。

        8
  •  1
  •   user1228 user1228    16 年前

        9
  •  0
  •   AMC    10 年前

    没有区别。请看这里: http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx

    语法T?是Nullable的缩写,其中T是值类型。这两种形式可以互换