[英]Null-conditional operator and string interpolation in C# 6
沒有一般規則,它有所不同。 一些功能只是語法糖,一些功能以前是不可能的,有些是兩者的組合。
字符串插值 - 這個:
string result = $"{bar}";
代替:
string result = string.Format("{0}", bar);
空傳播運算符( ?.
) - 這個:
var result = Foo()?.Length
代替:
var temp = Foo(); var result = (temp != null) ? temp.Length : null;
字符串插值 - 還使用FormattedString
添加對IFormattable
支持,因此這是可能的:
IFormattable result = $"{bar}"
在catch / finally中等待 - 現在可以在catch
使用await
並finally
阻塞:
try { } catch { await Task.Delay(1000); }
當然,這兩個類別中都有更多功能,例如異常過濾器和表達式身份成員。
與C#6.0中的大多數新功能一樣,如果要使用的變量的實例不為null,則空條件運算符只是簡寫(語法糖,如果要調用它),以獲取成員值的模式。
給定一個s
類型的string
,這樣的:
int? l = s?.Length;
被翻譯成:
int? l = s == null ? null : s.Length;
它可以與空合並運算符 ( ??
)結合使用:
int l = s?.Length ?? 0;
字符串插值也以string.Format
簡寫形式開始,但演變為可以生成string
或IFormatble
。 請參閱當前規范以獲取更多信息。
順便說一句, roslyn是編譯器平台的代號,而不是語言或它們的功能。
調用RaisePropertyChanged事件時,Elvis運算符非常有用。
在過去你會寫
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(nameof(X));
}
但是如果PropertyChanged在調用之前設置為null,則存在潛在的多線程問題。 相反,你可以寫:
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(X));
這完全避免了多線程問題 - 所以它不是Syntax糖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.