分组集合时,我有以下情况:
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());