爲什麼此代碼的工作:空,條件運算符和if語句
if (list?.Any() == true)
但是這個代碼不:
if (list?.Any())
說錯誤CS0266無法隱式轉換類型'布爾? 'bool'
那麼,爲什麼它不是一個語言功能,如果聲明在中做出這樣的隱式轉換?
爲什麼此代碼的工作:空,條件運算符和if語句
if (list?.Any() == true)
但是這個代碼不:
if (list?.Any())
說錯誤CS0266無法隱式轉換類型'布爾? 'bool'
那麼,爲什麼它不是一個語言功能,如果聲明在中做出這樣的隱式轉換?
bool someBoolean = true;
if (someBoolean)
{
// Do stuff.
}
因爲if
報表評估Boolean
表情,你正在試圖做的是從Nullable<bool>
.到bool
的隱式轉換。
bool someBoolean;
IEnumerable<int> someList = null;
// Cannot implicity convert type 'bool?' to 'bool'.
someBoolean = someList?.Any();
Nullable<T>
確實提供了一種方法GetValueOrDefault
可用於避免真或假的比較。但我會爭辯說,你的原始代碼更清潔。
if ((list?.Any()).GetValueOrDefault())
另一種可能吸引你的選擇是創建你自己的擴展方法。
public static bool AnyOrDefault<T>(this IEnumerable<T> source, bool defaultValue)
{
if (source == null)
return defaultValue;
return source.Any();
}
使用
if (list.AnyOrDefault(false))
你是說爲什麼不'if'聲明接受'布爾?'條件?對我而言,如果結果爲空,您覺得它很模糊不清。您默認爲虛假(有效),但在其他情況下,您希望默認爲true。 –
'list?.Any()'如果列表爲null,則可能爲null。鑑於任何返回布爾它有可能返回一個布爾值。因此在編譯時爲空的布爾值 – Nkosi
但除此之外,除非Mads或C#設計團隊中的其他人員回答,否則基本上會得到猜測。 –