How can I target an object's property with a string?
例如,如何动态引用Employee类型的对象的属性?我在找像employee."hasBeenPaid"这样的东西?它涉及反思吗?
1 2 3 4 5
| class Employee
{
String name;
Bool hasBeenPaid;
} |
- 你想要实现的更广泛的目标是什么?
- @如果假设答案是反射的,那么编解码器是一个副本,但是有其他方法可以做到这一点,链接的答案不包括在内。
您可以尝试:
1 2
| Type type = your_class.GetType();
PropertyInfo propinfo = type.GetProperty("hasBeenPaid"); |
如果你需要价值
1
| value = propinfo.GetValue(your_class, null); |
号
- 然后是propinfo.getValue(您的_对象,空)。另外,type.getproperty还有几个参数(至少是bindingFlags),允许您获取公共或非公共属性、静态或非静态(实例)等。
- 谢谢@alexeyf,你说得对!
您可以使用动态C功能;是的,它将在运行时使用反射来解析您的属性。
- 从技术上讲,这不起作用,DLR将抛出一个关于属性可访问性的运行时错误(这是默认的私有属性),并且您不能将其作为"字符串"访问,而是作为编码的duck类型的属性名访问。
- @亚当:操作没有指定她需要使用字符串来检索属性,我认为C动态特性可以覆盖她正在寻找的内容。
- 问题标题专门表示"with a string",示例用法显示一个字符串。在基本形式中使用dynamic不足以满足这些要求,使用字符串还意味着能够提供变量而不是literla。dynamic在不做任何更改的情况下使用duck类型,如果要使用字符串,则需要这样做:stackoverflow.com/questions/2783502/…并且它不会对其提供的实体起作用,并假定公共成员访问。
- 你说得对,@adam,感谢你分享这个很酷的链接。
- @埃弗拉科比西"她"?
- @迪马克只是一个占位符,除了你最后的评论,没有其他关于你性别的线索。不要把它当作个人问题。