1

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

私が間違っている場合は私を訂正してください

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;

参照型で使用されるデフォルトのキーワードはを生成するためnullです。それ以来

<any integer> | null

常に評価しnullます、あなたは持っています:

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

これは、両方の値がである理由を説明していますnull

于 2012-07-19T00:23:26.617 に答える