ホームページ >バックエンド開発 >C++ >C# の条件演算子で暗黙的な型変換が失敗する理由とその解決方法は?

C# の条件演算子で暗黙的な型変換が失敗する理由とその解決方法は?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-24 13:51:09976ブラウズ

Why Does Implicit Type Conversion Fail with C#'s Conditional Operator and How Can It Be Resolved?

C# 条件演算子と暗黙的な型変換の問題

C# の条件演算子 (?:) は、予期しない型変換エラーを引き起こす可能性があります。 一般的なシナリオには、ブール値をバイト変数に割り当てることが含まれます:

<code class="language-csharp">byte aByteValue;
bool aBoolValue = true;
aByteValue = aBoolValue ? 1 : 0; // Error: Cannot implicitly convert type 'int' to 'byte'</code>

条件演算子の型はオペランド (1 と 0) によって決まるため、このコードは失敗します。 C# は、これらのリテラル数値を int 型として扱います。 したがって、演算子は int の結果を生成しますが、これを暗黙的に byte.

に変換することはできません。

ターゲット変数の型によって変換が決まる一般的な代入とは異なり、条件演算子は分岐の共通型を優先します。この場合、両方の分岐が暗黙的に int に変換可能であり、int が結果の型になります。

解決策: 明示的なキャスト

解決策は、条件式を byte:

に明示的にキャストすることです。
<code class="language-csharp">aByteValue = aBoolValue ? (byte)1 : (byte)0; // Correct</code>

この明示的なキャストにより、条件式が byte に評価されることが保証され、暗黙的な変換エラーが解決されます。 コンパイラは意図された型を理解し、必要な変換を安全に実行します。

以上がC# の条件演算子で暗黙的な型変換が失敗する理由とその解決方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。