2017-02-01 8 views
1

einige Objekte gegeben, dass wie folgt aussieht:Get Wert von Element in Objekt durch Variablennamen

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; } 
} 

Wie würde ich so etwas tun:

int valueINeed = GetValue(MyObject, 2); 

Welche nennen würde ... (und das ist, wo ich die Hilfe) benötigen ...

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

würde ich eher nicht für Zeile in einem Schalter gehen Linie, wenn das vermieden werden kann.

+0

guten Punkt. Ich werde es aufräumen –

Antwort

2

Dies könnte helfen:

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

arbeitete wie ein Charme! –

0

Je nach Situation in der realen Welt möchten Sie vielleicht etwas anspruchsvolleres als eine einfache Reflexion (die langsam sein kann).

Die Dynamic Language Runtime (Unterstützung für dynamic) kann nützlich sein, und es gibt einige Diskussionen zu dieser Frage: How to call DynamicObject.TryGetMember directly?

Es gibt auch eine answer gibt, die das Dynamitey NuGet Paket verweist. Mit, dass Ihre GetValue() Routine ist nun einfach:

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