新的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;
}
}
答案 0 :(得分:15)
根据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;
}
}
}
}
输出:
是!