Null propagation 是預計要在 C# 6.0 釋出的新功能,目前已可在 Visual Studio 14 中透過設定將功能開啟進行體驗,只要在方案檔中加上:
<LangVersion>experimental</LangVersion>
Null propagation 能讓開發人員快速的在程式中做 Null 值的處理。
像是 Null 時直接回傳,非 Null 時取其成員屬性、方法、索引子的值,就可以像下面這樣撰寫:
...
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。
protected void OnNameChanged(EventArgs e)
{
NameChanged?.Invoke(this, e);
}
最後看個完整的範例:
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));
}
}
}
及其運行結果:
