2017-02-01 127 views
1

獲取項目的值對象鑑於一些對象,看起來像這樣:通過變量名

public class MyObject 
{ 
    public int thing_1 { get; set; } 
    public int thing_2 { get; set; } 
    public int thing_3 { get; set; } 
    .... 
    public int thing_100 { get; set; } 
} 

我怎麼會做這樣的事情:

int valueINeed = GetValue(MyObject, 2); 

這將調用...(和這是我所需要的幫助)...

private int GetValue(MyObject, int find) 
{ 
    return MyObject.thing_[find]; 
} 

我寧可不去逐行的轉換,如果是可以避免的。

+0

好點。我會清理它 –

回答

2

這可能幫助:

MyChildObject obj = new MyChildObject(); 
foreach(var prop in obj .GetType().GetProperties()) 
{ 
    if (prop.Name == "thing_" + find.ToString()) 
     return prop.GetValue(obj, null); 
} 
+0

工作就像一個魅力! –

0

根據您的真實世界的情況,你可能想要做的東西比直接的反射(這可能會很慢)更復雜。

動態語言運行時(對於dynamic支持)是有用的,並沒有在這個問題的一些討論:How to call DynamicObject.TryGetMember directly?

還有一個answer有它引用Dynamitey NuGet包。利用這一點,你GetValue()例行現在簡單:

public class MyObject 
{ 
    public int thing_1 { get; set; } 
    ... 
    int GetValue(int find) 
    { 
     return (int)Dynamic.InvokeGet(this, "thing_" + find.ToString()); 
    } 
}