Is there a CallingMemberName-Attribute?
本文关键字:CallingMemberName-Attribute there Is | 更新日期: 2023-09-27 18:17:27
我知道CallerMemberName-attribute,它将null参数替换为,例如,您正在从中调用方法的属性名。
这对于PropertyChanged-Notifications之类的东西非常有用。目前我们有一个不同的场景,我们希望有一个参数属性,用你正在调用的方法名替换空参数。
一般来说,这样做是可能的吗?老实说,我还没有过多地处理自定义属性,但在我们的例子中,有这样的东西会有点有趣。有什么有用的信息可以让我开始吗?
没有这样的属性,但是您可以使用c# 6 nameof
操作符:
public void SomeMethod ()
{
Console.WriteLine(nameof(SomeMethod));
}
当然,这不会动态地、自动地插入您所处的方法的名称,而是要求您拥有对该方法的实际引用。然而,它支持完整的智能感知,并且在重构方法名时也会自动更新。并且该名称是在编译时插入的,所以您不会得到任何性能下降。
如果你想把这些代码放在一个更中心的地方,就像你在基本视图模型中使用INPC实现一样,那么你的想法无论如何都有点缺陷。如果你有一个通用的方法,你调用它来找出你所在的方法名,那么它总是会报告通用方法的方法名:
public void SomeMethod ()
{
Console.WriteLine(GetMethodName());
}
// assuming that a CallingMemberNameAttribute existed
public string GetMethodName([CallingMemberName] string callingMember = null)
{
return callingMember; // would be always "GetMethodName"
}
但是,您可以在这里再次使用CallerMemberNameAttribute
,这将正确地获得调用GetMethodName
函数的方法名称:
public void SomeMethod ()
{
Console.WriteLine(GetMethodName());
}
public string GetMethodName([CallerMemberNamed] string callerMember = null)
{
return callerMember;
}