2016-03-22 102 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

我想使用我的枚舉類返回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

你的意思是你想要獲得該領域的_static價值,或者你難以找到合適的領域?如果是這樣,那麼它是[這個問題]的副本(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; 
}