【发布时间】:2012-07-19 00:16:15
【问题描述】:
在 C#
a1 和 a2 都为空。如果有人能解释它的工作原理,那就太好了。
int? a1 = 0;
int? a2 = 100;
a1 = a1 | default(int?);
a2 = a2 | default(int?);
更新
我提出这个疯狂示例的原因是 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' |真 = 真
如果我错了,请纠正我
【问题讨论】:
-
你想做什么?你期望结果是什么?你知道
default(int?)的值是多少吗?你知道|是什么意思吗? -
正如 Lippert 所说,“一个数字和‘我不知道’的 OR 是‘我不知道’”。
-
可空类型(无论底层类型如何)的默认值始终为空。
-
bsoundra:您需要在更新中更加具体。指导方针:(a) 提供原始代码,(b) 提供您认为的行为,(c) 您的期望或令您困惑的内容。在 int?情况很清楚,但是可以这么说,您的更新有点混乱。我感到困惑的一个原因是我无法构造编译器将使用 bool? 接受的工作代码。所以我建议您提供详细信息,我们中的一个会帮助您:-)
-
@PrashantGupta 我做了一些修改。请看看它是否增加了清晰度。