An if https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/if-else语句将评估Boolean https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/bool表达。
bool someBoolean = true;
if (someBoolean)
{
// Do stuff.
}
Because if
陈述评估Boolean
表达式,您试图做的是隐式转换Nullable<bool>. https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/nullable-types/ to bool
.
bool someBoolean;
IEnumerable<int> someList = null;
// Cannot implicity convert type 'bool?' to 'bool'.
someBoolean = someList?.Any();
Nullable<T>
确实提供了GetValueOrDefault https://msdn.microsoft.com/en-us/library/72cec0e0(v=vs.110).aspx可以用来避免真假比较的方法。但我认为你的原始代码更干净。
if ((list?.Any()).GetValueOrDefault())
可能对您有吸引力的另一种选择是创建您自己的扩展方法。
public static bool AnyOrDefault<T>(this IEnumerable<T> source, bool defaultValue)
{
if (source == null)
return defaultValue;
return source.Any();
}
Usage
if (list.AnyOrDefault(false))