Q
访问对象属性申述
1
A
回答
2
不,您必须使用反射。
如果最多只能创建一个辅助扩展方法就像这个例子:
using System;
static class Utils {
public static T GetProperty<T>(this object obj, string name) {
var property = obj.GetType().GetProperty(name);
if (null == property || !property.CanRead) {
throw new ArgumentException("Invalid property name");
}
return (T)property.GetGetMethod().Invoke(obj, new object[] { });
}
}
class X {
public string A { get; set; }
public int B { get; set; }
}
class Program {
static void Main(string[] args) {
X x = new X() { A = "test", B = 3 };
string a = x.GetProperty<string>("A");
int b = x.GetProperty<int>("B");
}
}
这是不好的,但是。
首先是因为您在运行时错误中正在编译时错误。其次,在这种情况下,反思的表现并不合理。 我认为这里最好的建议是,你不应该尝试在C#中编程,就好像它是ActionScript一样。
0
您可以在类中定义索引:
public class IndexerTest
{
private Dicionary<string, string> keyValues = new ...
public string this[string key]
{
get { return keyValues[key]; }
set { keyValues[key] = value; }
}
}
而且使用这样的:
string property = indexerTest["propertyName"];
+0
括号语法有点误导。在ECMA脚本对象[表达式]中相当于object.ident,如果表达式的字符串表示形式为“ident”。 Bert似乎在寻找的是在C#中执行动态属性访问的同样简短的方法。 – back2dos
相关问题
- 1. 从字符串访问对象属性申述
- 2. LuaInterface:访问对象属性
- 3. 访问AppDelegate对象属性
- 4. 访问对象属性
- 5. Javascript - 访问对象属性
- 6. 访问对象属性
- 7. jQuery - 访问对象属性
- 8. 访问对象属性[]
- 9. 访问对象属性中
- 10. 对象的访问属性
- 11. json对象访问属性问题
- 12. 如何访问JSON对象属性
- 13. 嵌套对象访问父母属性
- 14. JavaScript对象原型属性访问
- 15. 访问变量的对象属性?
- 16. 无法访问JavaScript对象属性
- 17. JSP不能访问对象属性
- 18. JavaScript对象属性访问技术
- 19. 如何访问JavaScript对象属性
- 20. 访问数组中对象的属性
- 21. 访问NSSet中对象的属性
- 22. Javascript对象访问它的属性
- 23. 对象倾斜访问类的属性
- 24. 如何访问Parse对象属性?
- 25. 访问动态对象属性
- 26. 访问对象的名称属性
- 27. 如何动态访问对象属性?
- 28. 使用对象访问属性值
- 29. 的JavaScript访问父对象属性
- 30. 我无法访问对象属性
THX的答复。 我只是想知道是否避免反射是一个选项,因为性能问题。 在这种情况下,代码将用于复合对象结构的递归方法中,该方法使用了很多。 反思如何去这里? –
@Bert Vandamme:我会告诉只有当你不知道对象时才使用反射,但是你可以举个例子吗? –
我认为,在知道属性类型的时候,即使抽象为定义单一属性的接口,也应该知道所有者的类型以避免反射。 :) 我同意,只有在编译时你根本不知道任何东西时才应该使用反射。 – back2dos