[解決済み】'int'と<null>の間に暗黙の変換がないため、条件式の型が決定できない
質問
なぜコンパイルできないのですか?
int? number = true ? 5 : null;
int' と <null> 間の暗黙の変換がないため、条件式の型が決定できません。
どのように解決するのですか?
仕様書(§7.14)では、条件式に対して
b ? x : y
のどちらか、3つの可能性があります。
x
と
y
はどちらもタイプ
と
ある
良い条件
を満たした場合、どちらか一方のみ
x
と
y
は、タイプ
と
ある
良い条件
を満たすか、コンパイル時エラーが発生します。ここで、quot;特定の良い条件"とは、特定の変換が可能であることを意味し、その詳細については後ほど説明します。
では、仕様書の肝心な部分に目を向けてみましょう。
<ブロッククオート
のどちらか一方だけなら
x
と
y
は型を持ち、両方とも
x
と
y
がその型に暗黙のうちに変換される場合、その型が条件式の型となる。
ここで問題となるのは
int? number = true ? 5 : null;
は、条件付き結果のうち1つだけが型を持っています。ここで
x
は
int
というリテラルと
y
は
null
を行うものです。
ではない
型がある
と
null
に暗黙のうちに変換されることはありません。
int
1
. したがって、"ある良い条件"を満たしておらず、コンパイル時エラーが発生します。
そこで は これを回避する方法が2つあります。
int? number = true ? (int?)5 : null;
ここでは、まだ
x
と
y
は型を持つ。なお
null
今も
が型を持っていない場合でも、コンパイラは何の問題も発生させません。
(int?)5
と
null
はどちらも暗黙のうちに
int?
(§6.1.4と§6.1.5)。
もう一方は当然です。
int? number = true ? 5 : (int?)null;
を読み込まなければならないが、今度は 異なる という節があり、なぜこれがOKなのかを理解することができます。
もし
x
は、タイプX
とy
は、タイプY
では
から暗黙の変換(6.1節)が存在する場合、その変換は
X
からY
からではなくY
からX
であればY
は条件式の型である。から暗黙の変換(§6.1)が存在する場合、その変換は
Y
からX
からではなくX
からY
であればX
は条件式の型である。それ以外の場合は、式の型が決定できず、コンパイル時エラーが発生します。
これ
x
は、タイプ
int
と
y
は、タイプ
int?
. から暗黙のうちに変換されることはありません。
int?
から
int
からの暗黙の変換があります。
int
から
int?
ということで、式の型は
int?
.
1 : さらに、条件式の型を決定する際に、左辺の型は無視されることに注意してください。これは、ここでよくある混乱の原因です。
関連
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
-
[解決済み] NULL-COALESCING 演算子のカスタム暗黙変換の不思議な挙動
-
[解決済み】大文字・小文字を区別しない「Contains(string)
-
[解決済み] ?:条件演算子でNullable型になる問題
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】Nullable型と三項演算子:なぜ`? 10 : null` は禁止されているのですか?[重複)。