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

变量类型结尾是?

  •  11
  • MicMit  · 技术社区  · 14 年前

    什么? ? 平均值:

    public bool? Verbose { get; set; }
    

    当应用于 string? ,出现错误:

    类型“string”必须是不可为空的值类型,才能用作泛型类型或方法“system.nullable”中的参数“t”。

    7 回复  |  直到 13 年前
        1
  •  18
  •   Ondrej Slinták    14 年前

    ? 使您的不可为空(值)类型可以为空。它不适用于 string ,因为它是引用类型,因此默认情况下可以为空。

    MSDN ,关于值类型:

    与引用类型不同,值类型 不能包含空值。 但是,可以为空的类型特性 允许值类型为 分配给空。

    ? 基本上是 Nullable<T> structure .

    如果你想了解更多,msdn有一个 great article 关于这个话题。

        2
  •  11
  •   Neil Knight    14 年前

    这个 ? 是以下结构的简写:

    struct Nullable<T>
    {
        public bool HasValue;
        public T Value;
    }
    

    您可以直接使用这个结构,但是 ? 是使生成的代码更清晰的快捷方式语法。而不是打字:

    Nullable<int> x = new Nullable<int>(125);
    

    相反,你可以写:

    int? x = 125;
    

    这不适用于字符串,因为字符串是引用类型而不是值类型。

        3
  •  7
  •   Anders Abel    14 年前

    bool? 是用于 System.Nullable<bool> . 只接受类型参数的值类型,不接受引用类型(如字符串)。

        4
  •  5
  •   Klaus Byskov Pedersen    14 年前

    bool? 是的速记符号 Nullable<bool> . 一般来说, the documentation 国家:

    语法T?是 可以为空,其中t是值类型。 这两种形式可以互换。

    自从 string 不是一个 value type (这是一个 reference type )不能将其用作 Nullable<T> .

        5
  •  3
  •   Beansy    14 年前

    这个?运算符指示属性实际上是可以为空的类型。

    public bool? Verbose { get; set; } 
    

    等于

    public Nullable<bool> Verbose { get; set; }
    

    可以为空的类型是C 2.0中引入的一种特殊类型,它接受值类型作为泛型pramater类型,并允许将空值分配给该类型。

    可以为空的类型只接受值类型作为泛型参数,这就是为什么在尝试使用时出现编译错误的原因?与字符串类型一起使用的运算符。

    更多信息: MSDN Nullable Types

        6
  •  3
  •   this. __curious_geek    14 年前

    只能将值类型声明为可以为空。默认情况下,引用类型可以为空。因此不能将字符串设置为可为空,因为字符串是引用类型。

        7
  •  3
  •   Embedd_0913    14 年前

    这个 ? 意味着您的值类型可以有一个空值,特别是在数据库的情况下。

    处理时,需要这些空值来检查某个值是否为空。

    它只能应用于值类型,因为引用类型可以为空。