微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 为什么IEnumerable.Any为一个假布尔的集合返回True?

我最近需要检查两个列表,以查看预期索引处的数据类型是否与预期类型匹配.所以我对每个索引i处的每个元素x进行了检查,并将此比较存储为布尔值,然后我调用Any来查看是否有任何布尔值为真.但是,以下语句始终抛出异常.

var values = new object[] {(UInt64) 40,(Boolean) true,(Double) 45.3};
var types = new[] {typeof (UInt64),typeof (Boolean),typeof (Double)};

if (types.Select((x,i) => values[i].GetType() != x).Any())
    throw new Exception();

(我知道为什么,但经过几分钟的调试后,我认为这会成为一个很好的问题).

解决方法

任何()不会做你认为它做的事情.如果在Any()中没有lambda表达式,它只会检查枚举中是否有任何元素被调用.

你要么:

types.Select((x,i) => values[i].GetType() != x).Any(x => x)

或者可能

types.Where((x,i) => values[i].GetType() != x).Any()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐