是否可以在 switch 语句中使用 nameof 表达式?
Is it possible to use an nameof expression in switch statement?
新的 C# 6.0 nameof
在 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 "MyProperty":
DoSomething();
break;
}
}
使用新的 nameof 表达式,这段代码可以编译/工作吗?
private void OnMyObjectPropertyChanged(object sender, PropertyChangedEventArgs args)
{
switch (args.PropertyName)
{
case nameof(MyObject.MyProperty):
DoSomething();
break;
}
}
根据this question,nameof
关键字的计算是在编译时完成的。这将使它成为一个常量,它将在 switch
语句中工作。
当您查看此代码的 compiled output 时证明了这一点:
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;
}
}
}
}
输出:
Yes!
新的 C# 6.0 nameof
在 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 "MyProperty":
DoSomething();
break;
}
}
使用新的 nameof 表达式,这段代码可以编译/工作吗?
private void OnMyObjectPropertyChanged(object sender, PropertyChangedEventArgs args)
{
switch (args.PropertyName)
{
case nameof(MyObject.MyProperty):
DoSomething();
break;
}
}
根据this question,nameof
关键字的计算是在编译时完成的。这将使它成为一个常量,它将在 switch
语句中工作。
当您查看此代码的 compiled output 时证明了这一点:
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;
}
}
}
}
输出:
Yes!