C# 6.0 (C# vNext) 新功能之:Nameof Expressions

Nameof Expressions 故名思義就是取得名字的表達式。
先看例子:

以前的寫法:
void Foo(Bar bar)
{
    if (bar == null)
    {
        throw new ArgumentNullException("bar");
    }
}

新的寫法:
void Foo(Bar bar)
{
    if (bar == null)
    {
        throw new ArgumentNullException(nameof(bar));
    }
}

透過這種方式,就不需要寫死 "bar" 字符串。當我們重命名 bar 時,程式也能正常的反應正確的名稱。

Nameof 可以用於取得:類名、方法名、參數名、屬性(Attribute)名。
例子如下:

public class MyClass
{
    [TestMethod]
    public static void Show(int age)
    {
        Console.WriteLine(nameof(MyClass)); // 輸出 MyClass 類名
	Console.WriteLine(nameof(Show)); // 輸出 Show 方法名
	Console.WriteLine(nameof(age)); // 輸出 age
	Console.WriteLine(nameof(TestMethodAttribute)) // 輸出 Attribute 名
    }
}

另一個比較實用的情境如下:
class Bar : INotifyPropertyChanged
{
    private int foo;


    public int Foo
    {
        get { return foo; }
        set
        {
            foo = value;
            PropertyChanged(this, new PropertyChangedEventArgs(nameof(Foo));
        }
    }


    public event PropertyChangedEventHandler PropertyChanged;
}

使用 nameof(Foo) 代替字符串 "Foo";

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章