加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 20:04:00 所属栏目:百科 来源:网络整理
导读:我最近需要检查两个列表,以查看预期索引处的数据类型是否与预期类型匹配.所以我对每个索引i处的每个元素x进行了检查,并将此比较存储为布尔值,然后我调用Any来查看是否有任何布尔值为真.但是,以下语句始终抛出异常. var values = new object[] {(UInt64) 40,(
我最近需要检查两个列表,以查看预期索引处的数据类型是否与预期类型匹配.所以我对每个索引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()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读