查看??
定義,它說什麼時候應用返回左操作數,如果它不是null或右操作數。但爲什麼這不起作用?用法在Nullable <int>和字符串
int? i = null;
string s = i ?? "some string";
是否需要可空類型與右操作數類型匹配?
查看??
定義,它說什麼時候應用返回左操作數,如果它不是null或右操作數。但爲什麼這不起作用?用法在Nullable <int>和字符串
int? i = null;
string s = i ?? "some string";
是否需要可空類型與右操作數類型匹配?
??
對於下面的邏輯語句是一個語法糖(在這種情況下)。
int? i = null;
string s = null;
if (i != null)
{
s = i;
}
else
{
s = "some string";
}
顯然,編譯器永遠不會接受這個,它不會編譯,因爲我不能被隱式轉換爲s。編譯器不會爲空合併運算符制定例外規則,並強制執行類型要求。
如果您絕對希望能夠在單行中爲混合類型使用空合併運算符,則需要通過另一種方法執行類型轉換。
不能簡單地調用i.ToString()
,因爲如果i
爲空,將返回空字符串而不是空字符串,從而導致將空字符串分配給s
而不是「some string」。因此,你需要像下面這樣的通用擴展方法:
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
將被分配值「一些字符串」,因爲擴展方法會正確地保留可空值,從而允許空合併運算符選擇非空替代。
感謝您的解釋。 –
@DanielJabsøn不客氣:)。如果它對你有所幫助,一個被接受的答案總是不勝感激。 –
你可以具體說明發生了什麼事情與你期望發生的事情嗎? – BSMP
如果'i'不是'null'會怎麼樣?你知道,'int'不能被分配給'string'。 – Dmitry