C# 6.0 - Null propagation

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

<LangVersion>experimental</LangVersion>


Null propagation 能讓開發人員快速的在程式中做 Null 值的處理。


像是 Null 時直接回傳,非 Null 時取其成員屬性、方法、索引子的值,就可以像下面這樣撰寫:

1
2
3
4
5
...
var firstChar = str?[0]; //get 1st char if str not null
var length = str?.Length ?? 0; //get str's length if str not null, and if null length will be zero
var hashCode = str?.GetHashCode(); //get hashcode if str not null
...


也可以用於委派的觸發,不僅簡易且 Thread Safe。

1
2
3
4
protected void OnNameChanged(EventArgs e) 
{
NameChanged?Invoke(this, e);
}


最後看個完整的範例:

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
using System;
using System.Collections .Generic;


namespace ConsoleApplication2
{
public class Program
{
public static void Main()
{
string str = null;
PrintData(str);

str = "Level Up, http://larrynung.github.io/index.html";
PrintData(str);
}


private static void PrintData( string str)
{
var firstChar = str?[0]; //get 1st char if str not null
var length = str?.Length ?? 0; //get str's length if str not null, and if null length will be zero
var hashCode = str?.GetHashCode(); //get hashcode if str not null
Console.WriteLine( string.Format( "Str: {0}, FirstChar: {1}, Length: {2}, HashCode: {3}", str, firstChar, length, hashCode));
}
}
}


及其運行結果: