为什么此代码有效:
if (list?.Any() == true)
但这段代码没有:
if (list?.Any())
说错误 CS0266 无法隐式转换类型“bool?” '布尔'
那么为什么在if语句中进行这种隐式转换不是语言特性呢?
为什么此代码有效:
if (list?.Any() == true)
但这段代码没有:
if (list?.Any())
说错误 CS0266 无法隐式转换类型“bool?” '布尔'
那么为什么在if语句中进行这种隐式转换不是语言特性呢?
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))