通过变量名获取对象中项的值

时间:2017-02-01 22:32:24

标签: c#

给出一些看起来像这样的对象:

<?php

我将如何做这样的事情:

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

如果可以避免,我宁愿不在Switch中逐行进行。

2 个答案:

答案 0 :(得分:3)

这可能会有所帮助:

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

答案 1 :(得分: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());
    }
}