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是接受值为 int , bool , char 等的类型...
8 回答
在
? 声明 if 句子 . 这里: x 表示布尔条件; : 之前的部分是 then 句子,后面的部分是 else 句子 .
例如,在
? 声明了一个可空类型,意味着它之前的类型可能具有空值 .
它是Nullable<int>的简写 .
Nullable<T>
与不能为null的值类型一起使用 .它声明该类型可以为空 .
这意味着有问题的值类型是nullable type
// 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);
}
}
}
要添加上面的答案,这里是一个代码示例
这会产生编译错误:
请注意,NullableTest没有编译错误 . (注意t2声明中的?)
int?
这是Nullable<int>
的简写,这两种形式是可以互换的 .Nullable<T>
是一个运算符,您可以使用值类型T
使其接受null
.如果您不知道它:value types是接受值为
int
,bool
,char
等的类型...它们不能接受对值的引用:如果为它们分配
null
,它们会生成编译时错误,而不是reference types,它显然可以接受它 .你为什么需要那个?因为有时你的值类型变量可能会收到由不能很好地工作的东西返回的空引用,比如从数据库返回的缺失或未定义的变量 .
我建议你阅读Microsoft Documentation因为它很好地涵盖了这个主题 .
实际用途: