1

在 C# 中

int? a1 = 0;
int? a2 = 100;
a1 = a1 | default(int?);
a2 = a2 | default(int?);
a1 和 a2 都为空。如果有人能解释它的工作原理,那就太好了。

更新

我提出这个疯狂示例的原因是 int? 被布尔取代?和绑定过程。

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

这段代码没有给出警告说表达式的结果总是空的。推断的原因是'I_dont_know'|int = 'I_dont_know'其中'I_dont_know' | 真 = 真

如我错了请纠正我

4

2 回答 2

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

顺便说一句,Visual Studio 应该抱怨你的表达式总是解析为 null。(一个警告)。

于 2012-07-19T00:23:33.190 回答
5

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

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

这相当于:

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

因为在引用类型上使用的 default 关键字产生null. 而且因为

<any integer> | null

总是评估为null,你有:

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

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

于 2012-07-19T00:23:26.617 回答