1

バイトのMSDNページには、次のようにバイトを宣言できると書かれています。

byte myByte = 255;

そしてそれ

上記の宣言では、整数リテラル255が暗黙的にintからbyteに変換されています。整数リテラルがバイトの範囲を超えると、コンパイルエラーが発生します。

だから私は、次のようにコンパイルエラーが発生する理由を理解するのに苦労しています'int'型を'byte'に暗黙的に変換できません)

byte value = on ? 1 : 0; // on is defined as a bool earlier

何か違いがあれば、これをWindowsストアアプリプロジェクトとしてVS2012でコンパイルしています。

4

1 に答える 1

7

これは:

on ? 1 : 0

整数リテラルではありません。整数を返す式です。さらに、この式は実行時まで評価できません。

リテラルがある場合、コンパイラはコンパイル時にそれを評価し、範囲の要件を満たしていることを確認できます。ページに記載されているように、値が範囲外の場合にエラーを生成するのはコンパイラの責任です。

そしてあなたの同じページから:

より大きなストレージサイズの非リテラル数値タイプをバイトに暗黙的に変換することはできません。


@Jeppe Stig Nielsenのコメントによると、値が定数の場合にも機能します(最初のページにあるようにリテラルである必要はありません)。C#仕様によると:

6.1.9暗黙の定数式変換

暗黙の定数式変換では、次の変換が可能です。

  • 型の定数式(§7.19)は、定数式の値が宛先型の範囲内にある場合、型、、、、、、、またはに変換intできます 。sbytebyteshortushortuintulong

  • 型の定数式は、定数式の値が負でない限り、long型に変換できます。ulong

于 2012-09-11T14:09:32.013 に答える