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() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |