if-elseでは変換されないのに、なぜ ?: では変換エラーになるのですか?重複
2023-11-07 01:25:22
質問
コードを少し変更し、次の行を使用します。
uint a = b == c ? 0 : 1;
Visual Studioではこのようなエラーが表示されます。
型 'int' を 'uint' に暗黙的に変換することはできません。明示的な変換が存在します(キャストが抜けていませんか?)。
でも、このコードでいくと
uint a;
if (b == c)
a = 0;
else
a = 1;
エラーや警告が出ることなく、正常に動作しています。なぜでしょうか?
どのように解決するのですか?
<ブロッククオート
なぜ
uint a = b == c ? 0 : 1;
?
式の型
b == c ? 0 : 1
は
int
. で示されるように
この表
から暗黙のうちに変換されることはありません。
int
から
uint
に変更することはできません。
なぜ
a = 0
?
値が定数式の場合、数値型には特別な扱いがあるため。
C#仕様書6.1.9項より。
int型の定数式は、定数式の値が変換先の型の範囲内であれば、sbyte、byte、short、ushort、uint、ulong型に変換することができる。
long型の定数表現は、定数表現の値が負でない限り、ulong型に変換することができる。
最初の箇条書きにあるように
a = 0
と
a = 1
はどちらも許可されています。
0
と
1
は定数表現であり、有効な
uint
の値です。基本的には、コンパイラはコンパイル時にこれらの変換が有効であると容易に判断できるため、変換を許可しているということです。
ちなみに、もし
b == c
の部分を定数表現に変更した場合 (例.
true
のように)変更した場合、条件演算子式全体が定数式になり、コードはコンパイルされます。
関連
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] INTからVARCHARへの変換 SQL
-
[解決済み] DateTime?をDateTimeに変換する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み] 2つのリストを結合する
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み】画像のペイントにTextureBrushを使用する方法