Int を無効な列挙値にキャストしても例外がスローされない理由
C# では、列挙型は本質的に、一連の名前付き値をマップする数値型です。整数定数に変換します。列挙型の興味深い点は、定義された範囲外の値を含む任意の整数値を受け入れる能力です。
次のような列挙型に遭遇した場合、
enum Beer { Bud = 10, Stella = 20, Unknown }
次のようなキャストが期待されるかもしれません。 10、20、またはビールの種類にとって不明でない整数の場合は、例外がスローされます。しかし、そうではありません。無効な整数を Beer 型にキャストすると、その整数値が enum 変数に代入されます。
次のコードを考えてみましょう。
int i = 50; var b = (Beer) i; Console.WriteLine(b.ToString());
このコードを実行すると、「」が出力されます。コンソールまで50インチ。 b 変数には整数値 50 が割り当てられますが、これは Beer の有効な列挙値ではありません。ただし、キャストは例外をスローしません。
この動作は、.NET Framework の作成者による設計上の決定に起因します。列挙型は、int、short、byte などの他の値型によってサポートされます。その結果、それらの基になる値の型に対して有効な値を受け入れることができます。
この動作は一部のシナリオでは便利ですが、認識していないと予期しない結果を招く可能性もあります。
デフォルトの動作を超えて
列挙値をより厳密に適用する必要がある場合には、次のようなものがあります。定義された列挙値のみの使用を検証および強制するために使用できるユーティリティと拡張機能。これらのツールは、潜在的なエラーを回避し、列挙型変数が意図した値のみを保持するようにするのに役立ちます。
以上がC# で無効な整数を列挙型にキャストすると例外がスローされないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。