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));
        }
    }
}

及其運行結果:

C# 6.0 - Null propagation