为什么此代码有效:
TOP
但是这段代码没有:
if (list?.Any() == true)
说错误CS0266无法隐式转换类型' bool?'到' bool'
那么为什么它不是在 if 语句中进行这种隐式转换的语言功能呢?
答案 0 :(得分:2)
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))