我需要在 C# 中获取调用函数的名称。我阅读了有关 stackframe 方法的信息,但到处都说它不可靠并且会损害性能。
但我需要它用于生产用途。我正在编写一个自定义跟踪器,它将记录调用跟踪的方法的名称。
有人可以帮助提供一种有效的方法来获取调用函数名称吗?我正在使用 Visual Studio 2010。
我需要在 C# 中获取调用函数的名称。我阅读了有关 stackframe 方法的信息,但到处都说它不可靠并且会损害性能。
但我需要它用于生产用途。我正在编写一个自定义跟踪器,它将记录调用跟踪的方法的名称。
有人可以帮助提供一种有效的方法来获取调用函数名称吗?我正在使用 Visual Studio 2010。
upgrade to c# 5 and use CallerMemberName
public void Method([CallerMemberName] string caller="")
{
}
EDIT
Other nice things with c# 5
public void Method([CallerMemberName] string name="",
[CallerLineNumber] int line=-1,
[CallerFilePath] string path="")
{
}
您可以使用 LB 的答案中提到的 C# 4.5 属性与 .NET 3.5 或更高版本,只需声明它们(您需要使用 vs2012 或更高版本进行编译,否则不会出现任何错误,但参数值将保持为空!):
namespace System.Runtime.CompilerServices
{
[AttributeUsageAttribute(AttributeTargets.Parameter, Inherited = false)]
public sealed class CallerMemberNameAttribute : Attribute
{
}
[AttributeUsageAttribute(AttributeTargets.Parameter, Inherited = false)]
public sealed class CallerFilePathAttribute : Attribute
{
}
[AttributeUsageAttribute(AttributeTargets.Parameter, Inherited = false)]
public sealed class CallerLineNumberAttribute : Attribute
{
}
}
You can do something like:
var stackTrace = new StackTrace();
var name = stackTrace.GetFrame(1).GetMethod().Name;
and it work with any version of the framework/language.