C#与Nullables的行为

时间:2012-07-19 00:16:16

标签: c# nullable

在C#

int? a1 = 0;
int? a2 = 100;
a1 = a1 | default(int?);
a2 = a2 | default(int?);
a1和a2都是null。如果有人能解释它的工作,那将会很棒。

更新

我提出这个疯狂的例子的原因是int时的行为?被bool取代?和绑定过程。

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

纠正我如果我错了

2 个答案:

答案 0 :(得分:10)

这是由于以下原因..

1] default(int?) will always return 'null'
2] null | <anything> returns 'null'

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

不过,视觉工作室应该抱怨你的表达总是解析为null。 (警告)。

答案 1 :(得分:5)

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

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

相当于:

int? a1 = 0   | null;
int? a2 = 100 | null;

,因为 the default keyword used on a reference type yields null 。从那以后

<any integer> | null

始终评估为null,您有:

int? a1 = null;
int? a2 = null;

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