将方法的名称作为参数传递

2024-01-12

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(使用前将#替换为@)

将方法的名称作为参数传递 的相关文章

随机推荐