问题描述
|
说我有一堂课
public class Employee
{
public string name = \"\";
public int age = 20;
}
现在我想要一个可以动态获取Employee指定成员值的函数
public class Util<T>
{
public static string GetValue(T obj,string member)
{
// how to write
}
}
这样我就可以像
Employee p1 = new Employee();
string a = Util<Employee>.GetValue(p1,\"age\"); // a should be \"20\"
怎么做?像访问成员在PHP中使用obj [\“ ??? \”]
解决方法
反射。在这里看看:
反思:按名称划分的财产价值
哦还有这里
用我们自己的方式!
更新资料
叹息...这全都与““ codez \” ...到这里了:
p1.GetType().GetProperty(\"age\").GetValue(p1,null);
但是请务必检查链接,这里有很多东西要学习!,是的,它叫做反射。请参阅在C#中使用反射从字符串获取属性值,尝试以下代码:
// get value of private field: private double _number
int value = (int)typeof(p1).InvokeMember(\"age\",BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic,null,p1,null);
要么
// Get the FieldInfo of MyClass.
FieldInfo[] myFields = typeof(p1).GetFields(BindingFlags.Public | BindingFlags.Instance);
var age = myFields[i].GetValue(p1);
检查链接以获取更多详细信息,参数“年龄”从何而来?您应该考虑不将属性选择存储在字符串中的其他设计。
例如,如果要显示一个下拉列表,允许用户选择要作为排序依据的列,则希望将“ѭ6”从视图传递到模型,这将快得多,并且使用正确的数字排序而不是词典编排。,虽然我在这里看到了很多反射的用法,但也许在您的用例中,您可以
object p1 = new Employee();
var employee = p1 as Employee;
// optionally you could do a nullcheck
string a = employee.age; // a should be \"20\"
反思是可行的,但就您而言,我不会走那么远。但也许您需要泛型,然后是,请改用反射。