给出一些看起来像这样的对象:
<?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中逐行进行。
答案 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());
}
}