private void Method1()
{
//Do something
Log("Something","Method1");
}
private void Method2()
{
//Do something
Log("Something","Method2");
}
private void Log(string message, string method)
{
//Write to a log file
Trace.TraceInformation(message + "happened at " + method);
}
我有几种方法,例如上面的 Method1 和 Method2,我希望以某种方式将方法的名称作为参数传递,而无需手动编辑代码。
那可能吗?
从 C# 5 开始,这真的很容易使用来电者信息属性 http://msdn.microsoft.com/en-us/library/hh534540.aspx:
private void Method1()
{
//Do something
Log("Something");
}
private void Method2()
{
//Do something
Log("Something");
}
private void Log(string message, [CallerMemberName] string method = null)
{
//Write to a log file
Trace.TraceInformation(message + "happened at " + method);
}
就让它发挥作用而言:
- You must使用 C# 5(或更高版本)编译器,否则它不会知道如何特殊处理属性
- The attributes have to exist in your target environment. Options there:
- 在 .NET 4.5 中,属性只是简单地存在
- 对于.NET 4,您可以使用Microsoft.BclNuGet包 http://www.nuget.org/packages/Microsoft.Bcl/
- 对于早期版本的 .NET,请复制属性声明 http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute%28v=vs.110%29.aspx到您自己的代码中,确保使用相同的名称空间。当您稍后迁移到新版本的 .NET 时,您需要再次删除它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)