【发布时间】:2021-06-14 11:10:00
【问题描述】:
我尝试使用表达式四处搜索,但找不到可以在不使用反射的情况下访问类的字段或属性的内容。
基本上,我会在运行时得到一个字符串,我知道该字符串将是类的属性,但我需要验证它确实是该类中的属性。
例如如果我有课:
class Test { string a; public string b {get;set;} }
我在运行时获得了字符串值a 和b,我需要验证它们是否存在于Test 类中
到目前为止,我通过研究知道我可以做到:
string one = "a";
string two = "b";
PropertyInfo result1 = typeof(Test).GetProperty(one);
PropertyInfo result2 = typeof(Test).GetProperty(two);
但是这段代码使用了反射。我想知道是否有某种方法可以在不使用反射的情况下做到这一点?
我可以使用表达式来做到这一点吗?
【问题讨论】:
-
我很确定如果没有反思,这是不可能的。我看到的唯一方法是缓存反射的结果值,以避免对同一类型进行多次反射调用。即使是表达式也必须使用反射来收集信息。如果您尝试使用
propertyInfo.GetValue(instance, null)从属性中收集值,则可以使用表达式树提高性能,但您仍然需要反射来构建此表达式。一旦构建它就可以缓存。
标签: c# .net reflection expression