Cha*_* Y. 15 .net reflection expression-trees
在这个确定属性是否包含给定属性的最快方法问题的答案中,用户Darin Dimitrov假定表达式树比反射更安全.这是真的,如果是这样,为什么会这样呢?
And*_*rey 14
因为当您搜索字段时(如在该问题中),您使用字符串表示"Id"
.一旦它被改变,你的反射就会崩溃.
达林建议的是静态输入:
Expression<Func<Program, int>> expression = p => p.Id;
Run Code Online (Sandbox Code Playgroud)
你看到了吗?这很有趣,但C#4.0编译器并不是众所周知的特性:自动从lambda表达式构建表达式树并将其转换为Expression<T>
.所以,再后来,你可以穿越它,并得到MemberInfo
的Id
.但它并不像反射那样普遍,因为你无法搜索string
.
正如所述的问题是为什么表达树比反射更安全.
答案是他们都在使用反思.
编辑澄清 - MemberInfo.GetCustomAttributes是一个反射调用.
http://msdn.microsoft.com/en-us/library/system.reflection.memberinfo.getcustomattributes(VS.71).aspx
归档时间: |
|
查看次数: |
2687 次 |
最近记录: |