您是否可以通过显式传递值来覆盖由CallerMemberName归属的参数的自动捕获值?

Jac*_*sch 22 c# attributes .net-4.5

我有一种情况,在某些情况下,我希望将一个显式值传递给我的方法,其中一个参数标记为CallerMemberName,并从其他上下文中我希望它自动捕获.我想知道这是否可行,或者属性是否总是优先考虑?

你问我为什么要这样做呢?我正在编写一个可以从任何地方调用的审计组件.它需要审计上下文所需的一些参数,以及CallerMemberName参数.但是在我的一些超级课程中,我已经掌握了一些与审计相关的信息,所以我在那里编写了一个只接受CallerMemberName参数的方法.然后它调用我的审计组件传递它已经在其上下文中的参数以及它已经隐式捕获的调用者成员名称.

Jac*_*sch 31

是的,它是可能的,因此可以隐式和显式地使用它.

private void CaptureCaller(
     [CallerMemberName] string callerMemberName = "")
{
    // callerMemberName will contain the name of the method that called CaptureCaller if called with no parameters.
    // callerMemberName will contain the value of the passed in parameter if provided.
}

CaptureCaller();
CaptureCaller("custom value");
Run Code Online (Sandbox Code Playgroud)

  • 请注意,Resharper将显示警告"使用调用者信息属性传递给参数的显式参数" (5认同)
  • @SergueiFedorov,没有涉及很多代码.问题是显式传递给参数标记为`[CallerMemberName]`的方法的参数是否仍然会尊重该值,或者总是使用方法调用者指示的隐式值. (3认同)