C# 可以在switch语句中使用nameof表达式吗?
在C# 可以在switch语句中使用nameof表达式吗?,c#,.net,roslyn,nameof,C#,.net,Roslyn,Nameof,在PropertyChanged模式中,新功能非常适用于使用以下内容传播属性更改: private string _myProperty; public string MyProperty { get { return _myProperty; } set { _myProperty= value; OnPropertyChanged(nameof(MyProperty)); } } 在侦听属性更
PropertyChanged
模式中,新功能非常适用于使用以下内容传播属性更改:
private string _myProperty;
public string MyProperty
{
get
{
return _myProperty;
}
set
{
_myProperty= value;
OnPropertyChanged(nameof(MyProperty));
}
}
在侦听属性更改时,我使用此选项(是的,即使使用难看的硬编码字符串):
使用新的表达式名称,这段代码可以编译/工作吗
private void OnMyObjectPropertyChanged(object sender, PropertyChangedEventArgs args)
{
switch (args.PropertyName)
{
case nameof(MyObject.MyProperty):
DoSomething();
break;
}
}
根据,对nameof
关键字的评估是在编译时完成的。这将使它成为一个常量,它将在switch
语句中工作
这一点在您查看以下代码时得到了验证:
using System;
public class Program
{
public string A { get; set; }
public static void Main()
{
string a = "A";
switch (a)
{
case nameof(Program.A):
{
Console.WriteLine("Yes!");
break;
}
}
}
}
输出:
对!
我认为
nameof(MyObject.MyProperty)
不起作用<代码>我的属性不是静态的。您需要一个MyObject
的实例。它是。属性名始终是静态的@Frédérichamiditis还不能回答它是否也适用于非静态成员,也许更重要的是,属性。例如,用于标识传递给事件处理程序的方法的语法(如Program.Main
)已经存在。但是,类似于Program.SomeProperty
的东西也可能吗?(根据你的小提琴的一点延伸,似乎是这样,但我认为应该加上它,因为它要求的是属性。)我对“当然”变得很谨慎;一个特定方法重载的签名也是一个常量,但是没有C#语法来表达它。谢谢你的回答@O.R.Mapper如果你不相信Patrick,你可以在这里再次检查nameof
:@O.R.Mapper好的。知道了。
using System;
public class Program
{
public string A { get; set; }
public static void Main()
{
string a = "A";
switch (a)
{
case nameof(Program.A):
{
Console.WriteLine("Yes!");
break;
}
}
}
}