我知道CallerMemberName属性,它将null参数替换为您调用方法的属性名称。
这对于PropertyChanged-Notifications之类的东西非常有用。目前我们有一个不同的场景,我们希望有一个参数属性,用你正在调用的方法名称替换null参数。
一般来说,是否可以做这样的事情? 说实话,我还没有处理过很多自定义属性,但在我们的例子中,有这样的东西会有点有趣。 我可以从一开始就有什么有用的信息吗?
答案 0 :(得分:1)
没有此类属性,但您可以使用C#6 nameof
运算符:
public void SomeMethod ()
{
Console.WriteLine(nameof(SomeMethod));
}
当然,这不会动态地自动插入您所在方法的名称,但需要您对该方法有实际引用。但是,它支持完整的IntelliSense,并且在重构方法名称时也会自动更新。并且在编译时插入名称,因此您不会遇到任何性能下降。
如果您想将此代码放在更加集中的位置,就像您使用的那样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;
}