web-dev-qa-db-ja.com

c#nullを許可するintに値としてnullを割り当てることができない理由

Null可能なintにnullの値を割り当てることができない理由を説明します。

int? accom = (accomStr == "noval" ? null  : Convert.ToInt32(accomStr));

そのコードの何が問題になっていますか?

121
mancmanomyst

問題は、nullをintに割り当てることができないということではありませんか?問題は、三項演算子によって返される両方の値が同じ型でなければならないか、一方が他方に暗黙的に変換可能でなければならないことです。この場合、nullを暗黙的にintに変換したり、その逆を行うことはできないため、明示的なキャストが必要です。代わりにこれを試してください:

int? accom = (accomStr == "noval" ? (int?)null : Convert.ToInt32(accomStr));
235

ハリーSの言うことは正確ですが、

int? accom = (accomStr == "noval" ? null : (int?)Convert.ToInt32(accomStr));

また、トリックを行います。 (私たちResharperユーザーはいつでも群衆の中にお互いを見つけることができます...)

40
Will Dean

別のオプションは使用することです

int? accom = (accomStr == "noval" ? Convert.DBNull : Convert.ToInt32(accomStr); 

これが一番好きです。

6
Genius

同様に私は長い間やった:

myLongVariable = (!string.IsNullOrEmpty(cbLong.SelectedItem.Value)) ? Convert.ToInt64(cbLong.SelectedItem.Value) : (long?)null;
1
tenss