在C#中,如何动态指定对象的成员,例如PHP中的obj [“ abc”]

| 说我有一堂课
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\"
反思是可行的,但就您而言,我不会走那么远。但也许您需要泛型,然后是,请改用反射。

要回复问题请先登录注册