C#IEnumerable.Count()抛出IndexOutOfRangeException

前端之家收集整理的这篇文章主要介绍了C#IEnumerable.Count()抛出IndexOutOfRangeException前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
分组集合时,我有以下情况:
var result = data.GroupBy(x => x.Name.Split(new char[] { '-' })[1].Trim());

其中数据变量的类型为ObservableCollection< Data>

当我检查

if(result.Count()>0)

它抛出一个IndexOutOfRangeException

当然这是因为字符串拆分操作会引发异常.

问题是:有没有办法检查分组的结果是否为空并避免异常?

解决方法

首先,Enumerable.Count只执行延迟执行的LINQ查询( GroupBy使用延迟执行,查看备注部分).所以伯爵不应该责怪这里.

您正在拆分 – 并在索引1处访问此数组,这是第二个项目.显然没有第二项,因为没有 – .所以它与null无关.

也许只有那些有第二个令牌的那个就足够了:

var result = data
.Select(x => new{ Data = x,Split = x.Name.Split(new char[] { '-' }) })
.Where(x => x.Split.Length >= 2)
.GroupBy(x => x.Split[1].Trim());

或者第二个如果有第二个,否则第一个:

var result = data
.Select(x => new{ Data = x,Split = x.Name.Split(new char[] { '-' }) })
.GroupBy(x => x.Split.Length >= 2 ? x.Split[1].Trim() : x.Split[0].Trim());

猜你在找的C&C++相关文章