2011-01-26 1 views
4

0の値を持たないEnumクラスのインスタンスを作成する必要があります。 0値を使用すると、次のコードは正常に動作します:0の値を持たないC#Enumのインスタンスを作成する

ObjectFactory.CreateInstance("Edu3.DTOModel.Schedule.ScheduleStateEnum"); 

列挙型:

namespace Edu3.DTOModel.Schedule 
{ 
    public enum ScheduleStateEnum 
    { 
     DUMMY = 0, 
     Draft = 1, 
     Published = 2, 
     Archived = 3 
    } 
} 

私はDUMMYをコメントアウトした場合は、インスタンスの作成はもう動作しません。

答えて

6

0の値を持たないEnumクラスのインスタンスを作成する必要があります。あなたは型の変数を宣言することはできませんし、あなたがタイプにアクセスする必要がある場合

ScheduleStateEnum myState = 0; 

:あなたはこのようなインスタンスを作成することができます

public enum ScheduleStateEnum 
{ 
    Draft = 1, 
    Published = 2, 
    Archived = 3 
} 

:このような列挙型を想定し

文字列として(あなたの例のように)、Activator.CreateInstance

var myState = Activator.CreateInstance(Type.GetType(
        "Edu3.DTOModel.Schedule.ScheduleStateEnum")); 

もちろん、これらのオプションは、enumが1を宣言していなくても、実際には整数値0を持つインスタンスを提供します。あなたはそれはあなたが実際に宣言した値のいずれかをデフォルトにしたい場合は、例えば、それを見つけるためにリフレクションを使用する必要があります。

var myState = Type.GetType("Edu3.DTOModel.Schedule.ScheduleStateEnum") 
        .GetFields(BindingFlags.Static | BindingFlags.Public) 
        .First() 
        .GetValue(null); 

これは、すべての定義された時に値を持たない列挙型のためにクラッシュします。これを防ぐには、FirstOrDefaultを使用し、nullを確認してください。

5

Activator.CreateInstance(typeof(Edu3.DTOModel.Schedule.ScheduleStateEnum))

が正常に動作し、ゼロ値列挙型部材を提供することがベストプラクティスであるint型0

+0

確かに、TomTomは0値なしでは不可能だと言いますから。 –

+1

投稿する前に、特に何かが「うまくいく」と主張する前に、コードを試してください。単一の文字列を取る 'Activator.CreateInstance'のオーバーロードはありません。 – Timwi

+0

@Lieven - 私のように試してみてください。ゼロ値マッピングが定義されていなくても、新しいenumはゼロ値にすぎません。私はTomtomが私に "私はこれをすることは不可能ではありません"という意味ではないことを意味したと思います。私はなぜ人々が私の答えを下落させたか分からない... –

1

を作成しますので、あなたのObjectFactoryクラスに問題があります - 詳細については、http://msdn.microsoft.com/en-us/library/ms182149%28VS.80%29.aspxを参照してください。 Noneのようなゼロの値を持つメンバーがほしくない理由はありますか?

+0

まあ、私は間違いなくNoneを使うことができました。 Enumはデータベース内のテーブルを反映しているので、1から始まります。 –

2

実際は不可能です。 Enumは定義ごとに値のフィールドなので、0の数値で初期化する方法が必要です。

+0

これは間違っています。 。netでは、どの値が定義されていても、*任意の整数値をEnumに割り当てることができます。 – Nick

+0

@Nickレッスンを読んでください。または論理。私は決してあなたが何か価値を割り当てることはできないと言いました。 – TomTom

+0

質問:0値を持たないEnumクラスのインスタンスを作成するにはどうすればよいですか? あなたの答え:「実際には不可能です」 Enumは、0を含む* ANY *値を持つことができるため、Enumにはゼロが定義されていなくても**可能です。 – Nick

関連する問題