通常问号的主要用途是条件x ? "yes" : "no"
。
但我已经看到了它的另一个用途,但是找不到对?
运算符的这种用法的解释,例如。
public int? myProperty
{
get;
set;
}
答案 0 :(得分:399)
这意味着有问题的值类型为nullable type
Nullable类型是System.Nullable结构的实例。一个 可空类型可以表示其正确的值范围 基础值类型,加上一个额外的空值。例如,a
Nullable<Int32>
,发音为“Nullable of Int32”,可以任意分配 值从-2147483648到2147483647,或者可以赋值为null 值。可以为Nullable<bool>
赋值true,false或 空值。将null赋给数字和布尔类型的能力是 在处理数据库和其他数据时尤其有用 包含可能未赋值的元素的类型。对于 例如,数据库中的布尔字段可以存储值true或 是的,或者可能是未定义的。class NullableExample { static void Main() { int? num = null; // Is the HasValue property true? if (num.HasValue) { System.Console.WriteLine("num = " + num.Value); } else { System.Console.WriteLine("num = Null"); } // y is set to zero int y = num.GetValueOrDefault(); // num.Value throws an InvalidOperationException if num.HasValue is false try { y = num.Value; } catch (System.InvalidOperationException e) { System.Console.WriteLine(e.Message); } } }
答案 1 :(得分:110)
这是Nullable<int>
的简写。 Nullable<T>
用于允许将值类型设置为null
。值类型通常为cannot be null。
答案 2 :(得分:56)
在
x ? "yes" : "no"
?声明 if 句子。这里: x 表示布尔条件; :之前的部分是然后句子,之后的部分是 else 句子。
例如,
int?
?声明可以为空的类型,并且意味着它之前的类型可能具有空值。
答案 3 :(得分:47)
Nullable类型是。的实例 System.Nullable结构。 可以为空 type可以代表正常范围 其基础价值类型的值, 加上额外的空值。对于 例如,a [
Nullable<Int32>
],发音 可以分配“Intul的Int32” 任何值从-2147483648到 2147483647,或者可以分配它 空值。一个[Nullable<bool>
]可以 分配值true或false,或 空值。赋值为null的能力 数字和布尔类型是 处理时特别有用 数据库和其他数据类型 包含可能不是的元素 分配了一个值。例如,a 数据库中的布尔字段可以存储 值true或false,或者可能是 未定义。
答案 4 :(得分:11)
它声明该类型可以为空。
答案 5 :(得分:6)
实际用法:
public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
{
if (value == null)
{
return "bad value";
}
return someFunctionThatHandlesIntAndReturnsString(value);
}
答案 6 :(得分:3)
要添加上面的答案,这里是一个代码示例
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转换为&#39;测试&#39;因为它是不可空的 值类型
请注意,NullableTest没有编译错误。 (注意t2声明中的?)
答案 7 :(得分:2)
int?
是Nullable<int>
的简写,两种形式可以互换。
Nullable<T>
是一个运算符,可以将其与值类型T
配合使用以使其接受null
。
如果您不知道它:value types是接受int
,bool
,char
等值的类型
它们不能接受对值的引用:如果为它们分配一个null
,而不是reference types,则显然会接受,因此会产生编译时错误。
您为什么需要那个? 因为有时您的值类型变量可能会接收到某些情况下返回的空引用,而这种引用不能很好地工作,例如从数据库返回的丢失或未定义的变量。
我建议您阅读Microsoft Documentation,因为它涵盖了该主题。
答案 8 :(得分:0)
表示用(int?)声明的变量可以为空
int i1=1; //ok
int i2=null; //not ok
int? i3=1; //ok
int? i4=null; //ok