首页 文章

类型后面的问号的目的是什么(例如:int?myVariable)?

提问于
浏览
365

通常,问号的主要用途是条件, x ? "yes" : "no" .

但是我已经看到了它的另一个用途,但是找不到对这种 ? 运算符的使用的解释 .

public int? myProperty
{
   get;
   set;
}

8 回答

  • 53

    x ? "yes" : "no"
    

    ? 声明 if 句子 . 这里: x 表示布尔条件; : 之前的部分是 then 句子,后面的部分是 else 句子 .

    例如,在

    int?
    

    ? 声明了一个可空类型,意味着它之前的类型可能具有空值 .

  • 5

    Nullable类型Nullable类型是System.Nullable结构的实例 . 可空类型可以表示其基础值类型的正常值范围,以及额外的空值 . 例如,发音为“Nullable of Int32”的[Nullable <Int32>]可以分配从-2147483648到2147483647的任何值,或者可以为其指定空值 . 可以为[Nullable <bool>]赋值true或false,或者为null . 在处理包含可能未赋值的元素的数据库和其他数据类型时,将null分配给numeric和Boolean类型的能力特别有用 . 例如,数据库中的布尔字段可以存储值true或false,或者可能未定义 .

  • 105

    它是Nullable<int>的简写 . Nullable<T> 与不能为null的值类型一起使用 .

  • 11

    它声明该类型可以为空 .

  • 3

    这意味着有问题的值类型是nullable type

    Nullable类型是System.Nullable结构的实例 . 可空类型可以表示其基础值类型的正确值范围,以及额外的空值 . 例如,可以为发音为“Nullable of Int32”的Nullable分配从-2147483648到2147483647的任何值,或者可以为其指定空值 . 可以为Nullable赋值true,false或null . 在处理包含可能未赋值的元素的数据库和其他数据类型时,将null分配给numeric和Boolean类型的能力尤其有用 . 例如,数据库中的布尔字段可以存储值true或false,或者可能未定义 . class NullableExample
    {
    static void Main()
    {
    诠释? num = null;

    // HasValue属性是真的吗?
    if(num.HasValue)
    {
    System.Console.WriteLine(“num =”num.Value);
    }
    其他
    {
    System.Console.WriteLine(“num = Null”);
    }

    // y设置为零
    int y = num.GetValueOrDefault();

    //如果num.HasValue为false,则num.Value抛出InvalidOperationException
    尝试

    catch(System.InvalidOperationException e)
    {
    的System.Console.WriteLine(e.Message);
    }
    }
    }

  • 371

    要添加上面的答案,这里是一个代码示例

    struct Test
    {
        int something;
    }
    struct NullableTest
    {
        int something;
    }
    class Example
    {
        public void Demo()
        {
            Test t = new Test();
            t = null;
    
            NullableTest? t2 = new NullableTest();
            t2 = null;
        }
    }
    

    这会产生编译错误:

    错误12无法将null转换为'Test',因为它是一个不可为空的值类型

    请注意,NullableTest没有编译错误 . (注意t2声明中的?)

  • 45

    int? 这是 Nullable<int> 的简写,这两种形式是可以互换的 .

    Nullable<T> 是一个运算符,您可以使用值类型 T 使其接受 null .

    如果您不知道它:value types是接受值为 intboolchar 等的类型...

    它们不能接受对值的引用:如果为它们分配 null ,它们会生成编译时错误,而不是reference types,它显然可以接受它 .

    你为什么需要那个?因为有时你的值类型变量可能会收到由不能很好地工作的东西返回的空引用,比如从数据库返回的缺失或未定义的变量 .

    我建议你阅读Microsoft Documentation因为它很好地涵盖了这个主题 .

  • 0

    实际用途:

    public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
    {
      if (value == null)
      {
        return "bad value";
      }
    
      return someFunctionThatHandlesIntAndReturnsString(value);
    }
    

相关问题