[英]Usage of ?? between Nullable<int> and string
看着??
定義它說當應用程序返回左操作數時,如果它不為空或右操作數。 但是為什么這不起作用?
int? i = null;
string s = i ?? "some string";
是否要求可空類型與正確的操作數類型匹配?
??
是以下邏輯語句的語法糖(在這種情況下)。
int? i = null;
string s = null;
if (i != null)
{
s = i;
}
else
{
s = "some string";
}
顯然,編譯器永遠不會接受它,它也不會編譯,因為 i 不能隱式轉換為 s。 編譯器不會對空合並運算符進行例外處理,並且會強制執行類型要求。
如果您絕對希望能夠在一行中對混合類型使用空合並運算符,則需要通過另一種方法執行類型轉換。
您不能簡單地調用i.ToString()
因為如果i
為空,這將返回一個空字符串而不是 null,從而導致將空字符串分配給s
而不是“某個字符串”。 因此,您將需要類似於以下通用擴展方法的內容:
public static string ToNullableString<T>(this Nullable<T> nullable) where T : struct
{
return nullable == null ? null : nullable.ToString();
}
可以這樣使用:
int? i = null;
string s = i.ToNullableString() ?? "some string";
s
將被分配值“某個字符串”,因為擴展方法將正確保留可空值,允許空合並運算符選擇非空替代。
從 C# 6 開始,您可以使用Null Propagation Operator來簡化賦值,而無需使用擴展方法。
int? i = null;
string s = i?.ToString() ?? "some string";
在上面, i
被檢查為空,如果不是空, .ToString()
被調用並分配結果。 否則, i
被評估為 null 這導致 null 合並運算符優先並且“某個字符串”被分配給s
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.