C# 6.0 - Nameof expressions

Nameof expressions 是預計要在 C# 6.0 釋出的新功能,目前已可在 Visual Studio 14 CTP3 中透過設定將功能開啟進行體驗,只要在方案檔中加上:

<LangVersion>experimental</LangVersion>

Nameof expressions 能讓開發人員輕易的在程式中取得變數或是類別名稱。


以往我們是無法取得變數名稱的,所以像是在撰寫參數檢查,當丟出的例外需要帶入參數名稱時,多半是自己填入字串帶入。但這樣的做法不是很恰當,因為拼錯時並不容易發現,且當重構參數名稱時很容易遺漏要配合修改。


至於類別名稱的取得,相較於變數名稱的取得是簡單了許多。但是名稱的取得需要 Runtime 進行解析,這樣的做法有時又多了一些無謂的耗費。


Nameof expressions 的出現能幫助開發人員解決這樣的問題,使用上只要叫用nameof,並帶入欲取得名稱的類別或變數即可。

nameof( 欲取得名稱的類別或變數 )

這邊直接看個完整的使用範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;

namespace ConsoleApplication10
{
class Program
{
static void Main(string[] args)
{
var blog = new Blog
{
Name = "Level Up" ,
Url = "http://larrynung.github.io/"
};


DumpBlogInfo(blog);
DumpBlogInfo(null);
}


static void DumpBlogInfo(Blog blog)
{
Console.WriteLine( string.Format( "Dump data (Type is {0})..." , nameof(Blog )));


if (blog == null) throw new ArgumentNullException(nameof (blog));

Console.WriteLine(blog .Name);
Console.WriteLine(blog .Url);
Console.WriteLine();
}
}


class Blog
{
public string Name { get; set; }
public string Url { get; set; }
}
}

其運行結果如下:


可以看到程式中很輕易的就取得了類別與變數的名稱。


最後反組譯看一下,可以發現使用 Nameof expressions 功能,編譯器會在編譯時幫我們編譯成對應的字串,所以 Runtime 時無需額外的解析耗費。