C# 使用CallerMemberName和MethodImplOptions.noInLine-是否有必要?

C# 使用CallerMemberName和MethodImplOptions.noInLine-是否有必要?,c#,attributes,.net-4.5,C#,Attributes,.net 4.5,快速背景: 尝试创建一个方法,该方法将基于调用它的方法返回预定义字符串。(钻头被掩盖,但距离足够近) 我打算使用[]属性,但我的问题是: =>我是否需要将MethodImplOptions.noinline与此属性一起使用,或者编译器是否隐式应用了此属性 CallerMemberName属性和早期版本的.net4.5之前的框架都有很多例子,它们使用MethodImplOptions.noinline方法属性,但没有明确说明不需要同时使用它们 提前感谢您的阅读 这是不必要的,因为编译器在编译时解析

快速背景: 尝试创建一个方法,该方法将基于调用它的方法返回预定义字符串。(钻头被掩盖,但距离足够近)

我打算使用[]属性,但我的问题是:

=>我是否需要将
MethodImplOptions.noinline
与此属性一起使用,或者编译器是否隐式应用了此属性

CallerMemberName
属性和早期版本的.net4.5之前的框架都有很多例子,它们使用
MethodImplOptions.noinline
方法属性,但没有明确说明不需要同时使用它们


提前感谢您的阅读

这是不必要的,因为编译器在编译时解析:

调用方信息值作为文本发送到中间层 编译时的语言(IL)


内联不是由C#编译器完成的,而是在将IL代码编译到程序集时由JIT完成的,因此内联不会影响
CallerMemberName

“我需要使用MethodImplOptions.NoInline这个属性,还是编译器隐式应用了它?”为什么?你想解决什么问题?您试图诊断/解决的是什么?我确定的是,
noInLine
属性会导致编译器对该段代码进行去优化,这样您就不会得到调用方名称的调用方。我的想法是,
CallerMemberName
属性会有同样的问题,除非它隐式地关闭了这个内联?只是想澄清一下情况。更多的是预防性的,而不是修复一个bug。你能显示一个代码样本,你认为这个属性的好处吗?这是一个问题,让我考虑一下,请看:评论提到使用属性来防止内联。看起来EvK已经找到了答案!