Rog*_*ier 9 .net c# roslyn nameof
新的C#6.0nameof在使用PropertyChanged以下内容传播属性更改的模式中非常出色:
private string _myProperty;
public string MyProperty
{
get
{
return _myProperty;
}
set
{
_myProperty= value;
OnPropertyChanged(nameof(MyProperty));
}
}
Run Code Online (Sandbox Code Playgroud)
在监听属性更改时,我使用它(是的,即使是丑陋的硬编码字符串):
private void OnMyObjectPropertyChanged(object sender, PropertyChangedEventArgs args)
{
switch (args.PropertyName)
{
case "MyProperty":
DoSomething();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
使用新的nameof表达式,这段代码会编译/工作吗?
private void OnMyObjectPropertyChanged(object sender, PropertyChangedEventArgs args)
{
switch (args.PropertyName)
{
case nameof(MyObject.MyProperty):
DoSomething();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
Pat*_*man 15
根据这个问题,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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
是!