2016-03-22 11 views
0

私は検索しましたが、正解が見つかりませんでした。C#クラスフィールドの反映

public sealed Class Foo{ 
    public static readonly Foo x; 
    public static readonly Foo y; 
    public static readonly Foo z; 
    public static readonly Foo t; 

    public string Name{get;} 
    public int Value{get;} 
    public Foo(string name,int val){//properties sets here} 
} 

そして、私のようなenum持っている:

は、私たちのようなクラスを持っていると仮定別のライブラリに

public enum FooFinder{ 
    x, 
    y, 
    z, 
    t 
} 

このFooのクラスをFooLib.dll、私が作成したFooFinderと呼ばれます。

私のenumクラスを使用してFoo.x、Foo.yの型を返したいとします。

private static Foo GetFoo (FooFinder Level) 
    { 
     FieldInfo[] props = typeof(Foo).GetFields(); 

     foreach (FieldInfo item in props) 
     { 

      if (item.Name == Enum.GetName(typeof(FooFinder), Level)) 
      { 
       // I could create an instance of Foo with Activator.CreateInstance() 
       // but I want to return Foo class' chosen field by FooFinder enum 
      } 
     } 

    } 

私は自分がしたいことを説明できることを希望します。では、Fooクラスの選択フィールドをリフレクションでどのように取得できますか?または私は得ることができますか?

+0

は[知っておくと便利]することができた(https://msdn.microsoft.com/en-us/library/ms229043(V = vs.110).aspxの) 。質問については、メソッドにインスタンスを渡さないので、インスタンスをどこかから取得する必要があります。あなたはどこから知っているだけですか。 – Sinatr

+1

これらのすべての静的フィールド(x、y、z、t)のタイプは何ですか? –

+0

あなたは、そのフィールドの_静的な値_を取得したい、または正しいフィールドを見つけるのに問題がありますか?もしそうなら、それは[この質問]の複製です(http://stackoverflow.com/questions/5898385) –

答えて

0

たぶん、あなたが使用することができます。

private static Foo GetFoo (FooFinder Level) 
{ 
    var fieldInfo = typeof(Foo).GetField(Enum.GetName(typeof(FooFinder), level), BindingFlags.Static | BindingFlags.Public); 
    return fieldInfo?.GetValue(null) as Foo; 
} 
関連する問題