5n0*_*0u7 13 c# variables nullable
我在C#中遇到了一些声明变量的代码: int? number
这?意味着什么,以及它与以下内容有何不同:int
Kyl*_*man 20
int不可能null.
int?是Nullable<int>结构的别名,您可以将其设置为null.
IRO*_*GBU 10
int?是创建通用System.Nullable<T>结构类型实例的简写.它允许您使变量可以为空.请记住,鉴于<ValueType>?语法是简写,您可以声明您的变量:
Nullable<int> i = 10;
Run Code Online (Sandbox Code Playgroud)
int?是简写Nullable<int>,允许您假装一个整数可以处理空值.
int? foo = null;
Run Code Online (Sandbox Code Playgroud)
它对于指示过去曾使用过魔术值(-1)的值缺乏很有用,并且在处理允许空条目的数据库列时也很有用.
对于一个准深度的外观,a Nullable<T>(在.NET 2.0中引入)只是一个值类型的包装器,T它暴露了两个属性,HasValue并且Value,其中HasValue是一个布尔值,指示值是否已设置且Value(显然已足够)返回价值.Value如果HasValue为false则访问是错误的.因此,要访问Value,HasValue首先检查是一种好的形式.此外,如果您只想将任何非值标准化为默认值(数字类型为0),则GetValueOrDefault()无需检查即可使用该方法HasValue.
请注意,尽管您似乎设置foo为null,但在正常使用情况下它实际上并不为 null.null这种类型只是额外的语法糖.上面的代码行转换为
Nullable<int> foo = new Nullable<int>();
Run Code Online (Sandbox Code Playgroud)
以这种方式初始化变量只是将HasValue属性设置为false.
但是,在涉及装箱的情况下,如果HasValue为false ,则该值实际上将为空(否则将为方框T).注意后果!例如,在:
int? foo = null;
string bar = foo.ToString(); // this is fine, returns string.Empty
Type type = foo.GetType(); // blows up! GetType causes the value to box
// resulting in a NullReferenceException
Run Code Online (Sandbox Code Playgroud)
那是一个快速的速成课程.有关更多信息,请访问文档.