2

私の同僚は今日、設計時に列挙型の値を取得できるかどうかを尋ねてきました。キャストとイミディエイトウィンドウを使用して、実行時にこれを行うのは簡単だと指摘しました。

どうやらVB6ではクイック情報を使用してこれを行うことは可能ですが、設計時にC#でこれを行う方法はありますか?

列挙型は大きく、その値をintとしてデータベースに格納します。データベース内の値が列挙型と同期しなくなったと思われる場合(おそらく誰かが列挙型を編集しているため)、データベース内の値が実際に何を参照しているかを知る必要があるというバグがあります。

4

6 に答える 6

1

列挙型を取得し、列挙型のすべてのフィールドを反復処理して、「EnumEntry=EnumValue」のようなものを出力する小さなプログラムを作成してみませんか。列挙型のすべてのフィールドの明示的な説明を取得し、さらに設計時の分析を実行できること。

Array values = Enum.GetValues(typeof(myEnum));

foreach( MyEnum val in values )
{
   Console.WriteLine (String.Format("{0}: {1}", Enum.GetName(typeof(MyEnum), val), val);
}

ここから:C#列挙型を反復処理しますか?(System.Arrayのインデックス作成)

于 2012-05-03T11:28:00.183 に答える
1

列挙型を含むデータベーステーブルがあり、それをc#の列挙型と並べたい場合は、次のことを行うことをお勧めします。

enum Whatever
{

  Value1 = 1, 
  Value2 = 2, 
  Value3 = 3
}

このようにすると、主キー(おそらく自動インクリメント)を列挙型と並べることができ、変更される可能性は低くなります。誰かがやって来て、ランダムな列挙値を追加したい場合、既存の列挙値には影響しません。

于 2012-05-03T11:31:03.383 に答える
1

Webアプリケーションなどがない限り、デザイン時にイミディエイトウィンドウを使用できます。次の行:String.Format( "{0:D}"、enumValue

于 2013-07-22T10:51:21.280 に答える
0

明示的な値が指定されていない場合、列挙型メンバーは0から始まり、1ずつ増加します。これを使用して、列挙型の数値を判別できます。

例えば:

enum Days
{
Sunday,
Monday,
Tuesday,
}

上記では、Sunday = 0、Monday=1などです。

于 2012-05-03T11:24:49.163 に答える
0

はい、c#でも可能です。値を明示的に定義しない場合は、0から始まる値を割り当てますが、値を割り当てることもできます。

enum Days
{
Sunday=10,
Monday=20,
Tuesday=30,
}

そしてあなたは値を得ることができます

console.WriteLine((int)Days.Sunday); //print 10
console.WriteLine(Days.Sunday); //print Sunday
于 2012-05-03T11:33:09.280 に答える
0

名前enumではなく、デバッガーで整数値を直接表示したいと思います。

これは、 DebuggerDisplayAttributeを使用して実現できます(生のオブジェクトの視覚化をオフにする必要があることに注意してください)。enum次のように宣言を装飾するだけです。

[DebuggerDisplay("{ToString()} ({ToString(\"d\")})")]
enum MyEnumToDebug
{
}

デバッガー内で型の変数にカーソルを合わせるMyEnumToDebugと、名前と整数値の両方が表示されます。

于 2012-05-03T11:42:31.403 に答える