141

nullable int に null の値を代入できない理由を説明してください。

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

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

4

4 に答える 4

276

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

int? accom = (accomStr == "noval" ? (int?)null : Convert.ToInt32(accomStr));
于 2008-12-01T10:41:02.303 に答える
47

ハリー S の言うことはまったく正しいのですが、

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

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

于 2008-12-01T10:44:11.877 に答える
6

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

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

私はこれが一番好きです。

于 2010-09-24T06:21:45.400 に答える
1

同様に、私は長い間しました:

myLongVariable = (!string.IsNullOrEmpty(cbLong.SelectedItem.Value)) ? Convert.ToInt64(cbLong.SelectedItem.Value) : (long?)null;
于 2012-04-09T11:47:46.357 に答える