C#IEnumerable.Count()抛出IndexOutOfRangeException

Min*_*amy 7 c# linq ienumerable

分组集合时,我有以下情况:

var result = data.GroupBy(x => x.Name.Split(new char[] { '-' })[1].Trim());
Run Code Online (Sandbox Code Playgroud)

数据变量的类型 ObservableCollection<Data>

当我检查

if(result.Count()>0)
Run Code Online (Sandbox Code Playgroud)

它抛出一个IndexOutOfRangeException

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

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

Tim*_*ter 10

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

您正在拆分-并在索引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());
Run Code Online (Sandbox Code Playgroud)

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

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());
Run Code Online (Sandbox Code Playgroud)