Is there a CallingMemberName-Attribute?

本文关键字:CallingMemberName-Attribute there Is | 更新日期: 2023-09-27 18:17:27

我知道CallerMemberName-attribute,它将null参数替换为,例如,您正在从中调用方法的属性名。

这对于PropertyChanged-Notifications之类的东西非常有用。目前我们有一个不同的场景,我们希望有一个参数属性,用你正在调用的方法名替换空参数。

一般来说,这样做是可能的吗?老实说,我还没有过多地处理自定义属性,但在我们的例子中,有这样的东西会有点有趣。有什么有用的信息可以让我开始吗?

Is there a CallingMemberName-Attribute?

没有这样的属性,但是您可以使用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;
}
相关文章:
  • 没有找到相关文章