Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中内联的替代方案?_C#_Inline Code - Fatal编程技术网

C#中内联的替代方案?

C#中内联的替代方案?,c#,inline-code,C#,Inline Code,我使用以下语句将当前函数(例如,事件处理程序)的名称打印到Visual Studio(2010)中的输出窗口: 如果我把它放在一个实用函数中,比如DisplayFunctionName(),而不是调用它的父函数,那么每次显示的都是“DisplayFunctionName”——这并不奇怪 我知道C#中没有内联,但是除了使用“snippets”之外,是否还有其他解决方案,以避免重复此类语句?您可以使用显示调用方的名称 public void WriteDebug(string message, [C

我使用以下语句将当前函数(例如,事件处理程序)的名称打印到Visual Studio(2010)中的输出窗口:

如果我把它放在一个实用函数中,比如
DisplayFunctionName()
,而不是调用它的父函数,那么每次显示的都是“
DisplayFunctionName
”——这并不奇怪

我知道C#中没有内联,但是除了使用“snippets”之外,是否还有其他解决方案,以避免重复此类语句?

您可以使用显示调用方的名称

public void WriteDebug(string message, [CallerMemberName] string memberName = "")
{
    Debug.Write("[" + memberName + "] " + message);
}
还有和,您可以使用它包含更多诊断信息。这些属性是。结合方法上的
[Conditional(“DEBUG”)]
,您可以在调试期间提供大量信息,这些信息在发布版本中完全消除

我知道C#中没有内联,但是除了使用“片段”之外,还有其他解决方案吗?这样就不必重复这样的语句了

请注意,这实际上与“内联”没有直接关系,与获取调用成员的诊断信息也没有直接关系。也就是说,JIT在代码运行时肯定会执行内联,这是C#具有良好性能的主要原因之一

这需要Visual Studio 2012,因为它在该版本中使用了新的编译器功能


如果您使用的是较旧的编译器,另一种选择是使用来提取堆栈跟踪信息。但是,这会对性能产生相当大的影响,因此我不会在紧循环中使用它,至少不会在生产环境中使用,尽管它在调试期间仍然可以用于诊断

string callingMethodName = (new StackTrace()).GetFrame(1).GetMethod().Name;

“C#?”中没有内联。醒醒:-)是的,C中肯定有内联。如果没有内联,你就无法获得那样的性能……我指的是“C++类型宏”意义上的内联。@SonerGönül:谢谢你的编辑。有关更多详细信息,请参阅。里德,谢谢,+1。我有VisualStudio2010,在我的项目中使用.NET4.0。未定义CallerMemberName。安装.NET4.5会解决这种情况吗?搜索结果表明VS 2010可能无法使用。@Sabuncu您需要使用VS 2012-这是一个编译器功能。您仍然可以将.NET 4作为目标(如果您自己实现这些属性),因为它纯粹是一个编译器功能,但在VS 2010中不起作用。@Decf:谢谢您提供的链接,+1。顺便说一句,里德在他的第二段中引用了相同的链接。@Sabuncu为你提供了另一个VS 2010/.NET 4的替代方案
string callingMethodName = (new StackTrace()).GetFrame(1).GetMethod().Name;