MethodBase.GetCurrentMethod().Name vs [CallerMemberName]

J. *_*non 5 .net c# reflection compiler-services

有什么区别和对代码的影响?

性能和限制如何,哪种更适合?

新属性:
- [CallerFilePathAttribute]
- [CallerMemberName]
- [CallerLineNumber]

今天它们也可以在.NET 4中使用(它易于开发并且看起来很神奇).它们的值在运行时被编译或解析?

Eug*_*sky 8

例如,MethodBase.GetCurrentMethod()返回当前方法,而您可以使用[CallerMemberName]等将有关调用方法的一些信息传递给当前方法.

前者在运行时使用反射进行评估,因此相对较慢,而后者在编译时处理,基本上是无操作性能.我实际上在测试中证实了这一点.每次反射都会花费大约20微秒的时间,如果经常调用则会非常重要,而[Caller...]属性不会产生可测量的惩罚.