C#与Nullables的行为

bso*_*dra 1 c# nullable

在C#中

int? a1 = 0;
int? a2 = 100;
a1 = a1 | default(int?);
a2 = a2 | default(int?);

bool? a1 = null;
bool? a2 = true;
a1 = a1 | default(bool?);
a2 = a2 | default(bool?);

这段代码没有发出警告,说表达式的结果总是为null.推断的原因是'I_dont_know'| int ='I_dont_know',其中'I_dont_know'| true = true

如我错了请纠正我

chk*_*dsk 10

这是因为以下原因..

1] default(int?) will always return 'null'
2] null | <anything> returns 'null'
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/xwth0h0d%28v=vs.80%29.aspx

顺便说一下,visual studio应该抱怨你的表达总是解析为null.(一个警告).


Joh*_*lla 5

首先请注意,这与写作没有什么不同:

int? a1 = 0   | default(int?);
int? a2 = 100 | default(int?);
Run Code Online (Sandbox Code Playgroud)

这相当于:

int? a1 = 0   | null;
int? a2 = 100 | null;
Run Code Online (Sandbox Code Playgroud)

因为引用类型上使用的默认关键字会产生null.从那以后

<any integer> | null
Run Code Online (Sandbox Code Playgroud)

总是评估null,你有:

int? a1 = null;
int? a2 = null;
Run Code Online (Sandbox Code Playgroud)

这解释了为什么两个值都是null.