2012-07-05 97 views
0

如何引用Employee类型的对象的属性,例如动态地引用?我喜欢employee."hasBeenPaid"之后?它是否涉及反思?如何使用字符串来定位对象的属性?

class Employee 
{ 
    String name; 
    Bool hasBeenPaid; 
} 
+0

什么是你要完成的更广泛的目标? – reuben 2012-07-05 10:18:33

+1

@CodeCaster这是一个重复,如果你认为答案将反映,但还有其他方式来做到这一点,链接的答案不包括。 – 2012-07-05 10:40:59

回答

5

你可以尝试:

Type type = your_class.GetType(); 
PropertyInfo propinfo = type.GetProperty("hasBeenPaid"); 

如果您需要的值

value = propinfo.GetValue(your_class, null); 
+2

然后propInfo.GetValue(your_object,null)。另外Type.GetProperty有几个参数(至少是BindingFlags),它允许你获取公有的或者不公开的属性,静态的或者非静态的(实例)等。 – 2012-07-05 10:20:08

+0

谢谢@AlexeyF,你绝对正确! – Marco 2012-07-05 10:26:31

2

您可以使用dynamic C# feature;是的,它会在运行时使用反射来解析你的属性。

+1

从技术上讲,这不起作用,DLR将抛出一个有关属性可访问性的运行时错误(这是默认的私有属性),并且不能以“字符串”的形式访问它,而是以编码的鸭型属性名称的形式访问它。 – 2012-07-05 10:20:29

+0

@Adam:OP没有指定她需要使用字符串检索属性,我认为C#动态功能可以涵盖她正在寻找的内容。 – 2012-07-05 10:33:44

+0

问题标题特别说“带字符串”,示例用法显示一个字符串。使用基本形式的'dynamic'不足以满足这些要求,使用字符串也意味着提供一个变量而不是一个literla的能力。 '动态'没有任何改变使用鸭子键入,如果你想使用字符串,你需要做这样的事情:http://stackoverflow.com/questions/2783502/c-sharp-using-the-dynamic-keyword-to -access-properties-via-strings-without-refle它不适用于他提供的实体并假定公共成员访问。 – 2012-07-05 10:36:01

相关问题