C# 6.0 新特性
Unity設定使用.net 4.6(Unity2018.2.2)
c# 6.0是.net 4.6的一部分,unity預設使用的是.net 3.5,可以在Edit – Project Settings – Player中,將Scripting Runtime Version修改為Experimental (.Net 4.6 Equivalent),然後重啟即可。
c# 6.0 新特性
pubic class Test: MonoBehaviour{ public int testValue => testRandomValue; private int testRandomValue; void Start() { testRandomValue = Random.Range(1, 10); print(testRandomValue+":"+testValue); TestList tl = new TestList() ; string results = $"name: {tl?.name} height: {tl?.height} status: {tl?.status}"; print(results); TestList t2 = new TestList { name = "B", height = 170, status = 1 }; string results2 = $"name: {t2?.name} height: {t2?.height} status: {t2?.status}"; print(results2); } } public class TestList { public string name { get; set; } = "A"; public float height { get; set; } = 180; public int status { get; set; } = 0; public string SayHello() { return "hello"; } }
解析:
1.表示式方法體
public int testValue => testRandomValue;
還可以跟方法
private static string SayHello() => "Hello World";
private static string TomSayHello() => $"Tom {SayHello()}";
2.自動屬性初始化器
public string name { get; set; } = "A";
可以不用在建構函式裡初始化
3.空操作符 ( ?. )
tl?.name
當一個物件或者屬性職為空時直接返回null, 就不再繼續執行後面的程式碼
?. 特性不光是可以用於取值,也可以用於方法呼叫,如果物件為空將不進行任何操作,下面的程式碼不會報錯,也不會有任何輸出。
4.字串插值
string results = $"name: {tl?.name} height: {tl?.height} status: {tl?.status}";
類似string.Format()
字串插值不光是可以插簡單的字串,還可以直接插入程式碼
string results = $"name:{tl.name} sayhello {tl.SayHello()}"
5.空合併運算子(??)
A??B
當A為null時返回B,A不為null時返回A本身
空合併運算子為右結合運算子,即操作時從右向左進行組合的。如,“A??B??C”的形式按“A??(B??C)”計算
以上是比較常見的C# 6.0 特性,其他的還有,可以自己去研究一下。