ホームページ > バックエンド開発 > C++ > C# で無効な整数を列挙型にキャストすると例外がスローされないのはなぜですか?

C# で無効な整数を列挙型にキャストすると例外がスローされないのはなぜですか?

DDD
リリース: 2025-01-03 01:10:39
オリジナル
433 人が閲覧しました

Why Doesn't Casting an Invalid Integer to an Enum in C# Throw an Exception?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート