次の C# コードを考えてみましょう:
enum Beer { Bud = 10, Stella = 20, Unknown }
通常、次のような列挙型の範囲外の整数は、例外:
int i = 50; var b = (Beer)i;
ただし、上記のコードは例外をスローせず、代わりに「50」をコンソールに出力します。
これは、 .NET Framework での設計上の決定に影響します。 enum は別の値の型 (int、short、byte など) によってサポートされるため、それらの値の型に有効な任意の値を持つことができます。
一方、この動作は混乱を招く可能性がありますが、バイナリ パターンを使用して列挙値内のさまざまなフラグの組み合わせを表す「ビット フラグ」列挙型の作成も可能になります。考えられるすべてのフラグの組み合わせを明示的に定義するのは面倒です。
未定義の列挙値の問題に対処するには、次のような高速に失敗するユーティリティ メソッドを使用することをお勧めします。
public static class EnumUtil<T> { public static T DefinedCast(object enumValue) { if (!System.Enum.IsDefined(typeof(T), enumValue)) throw new InvalidCastException(enumValue + " is not a defined value for enum type " + typeof(T).FullName); return (T)enumValue; } }
このメソッドはスローします。キャスト値が列挙型に定義されていない場合は例外です。
以上がC# で Int を無効な列挙値にキャストすると例外がスローされないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。