質問

C#列挙型はタイプセーフですか?

そうでない場合、どのような影響がありますか?

役に立ちましたか?

解決

わずかに異なる答えを与えるために...値はキャストの観点からタイプセーフですが、キャストされると未チェックのままです-つまり

enum Foo { A = 1, B = 2, C = 3 }    
static void Main()
{
    Foo foo = (Foo)500; // works fine
    Console.WriteLine(foo); // also fine - shows 500
}

このため、値をチェックするように注意する必要があります。たとえば、例外をスローする switch default を使用してください。

次の方法でも( [Flags] 以外の値について)確認できます:

bool isValid = Enum.IsDefined(typeof(Foo), foo);

他のヒント

はい、そうです。

以下は、 http://www.csharp-station.com/Tutorialsからのものです。 /Lesson17.aspx

列挙型は、厳密に型指定された定数です。これらは、シンボリック名を整数値に割り当てることができる本質的にユニークなタイプです。 C#の伝統では、これらは強く型付けされています。つまり、メンバーの基になる値が同じであっても、ある型の列挙型を別の型の列挙型に暗黙的に割り当てることはできません。同じ行に沿って、整数型と列挙型は暗黙的に交換できません。異なる列挙型と整数型の間のすべての割り当てには、明示的なキャストが必要です。

Enum.IsDefinedを使用して引数の検証を行うことを提案している人には...しないでください! Per Brad Abrams( Enum Designのフレームワーク設計ガイドライン更新):

  

Enum.IsDefined()には実際に2つの問題があります。最初に、リフレクションと一連のコールド型メタデータをロードし、一見高価な呼び出しにします。第二に、メモが暗示するように、ここにはバージョン管理の問題があります。

はい

  

列挙型は、厳密に型指定された定数です。   それらは本質的にユニークなタイプです   シンボリック名を割り当てることができます   整数値。 C#の伝統では、   彼らは強く型付けされている、つまり   1つのタイプの列挙型は   の列挙に暗黙的に割り当てられます   にもかかわらず別のタイプ   メンバーの基本的な価値は   同じ。同じ線に沿って、   整数型と列挙型は   暗黙的に交換可能。すべて   異なる列挙間の割り当て   型と整数型には   明示的なキャスト。

はい。

C#:列挙型:

-名前付き値の型保証された列挙。

-プログラミングエラーの防止

-ユーザーは基になる型を制御できます(デフォルトはint)

-基になる値も制御できます

技術的にいいえただし、指定された名前の列挙のみを使用するようにすると、参照を更新せずに列挙値の名前を変更すると、コンパイル時エラーが発生します。この点に関しては、タイプセーフです。

ここでパーティーに遅れましたが、少し余分なものを捨てたいと思いました... Krzysztof Cwalinaの.NET Framework設計ガイドライン。有効な値がEnumsに渡されることを確認するための上記の優れたヒントに加えて、これはそれらを効果的に使用するためのその他のガイダンスとアドバイスを提供します。など

はいr強く型付けされたsafed u enum定数変数の整数値u hv 2への暗黙の変換はできません。expatcitlydo dat 例えば enum days { 太陽、 月 } int e =(int)days.sun; console.writeline(e);

C#列挙型は型安全な意味です

  1. 基礎となる型から実際の列挙型に暗黙的に変換することはできません
  2. また、両方の列挙型の基になる型が同じであっても、ある列挙型の値を別の列挙型に割り当てることはできません。明示的なキャストは常に必要です。
  3. 列挙型により、コードが読みやすくなり、保守しやすくなります。

列挙型のタイプセーフな性質を説明する優れたビデオチュートリアルに出くわしました。 こちらおよびそこ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top