C# 扩展方法仅在调试时引发异常
我使用以下扩展方法()将现有的可枚举项拆分为两个:C# 扩展方法仅在调试时引发异常,c#,exception,extension-methods,C#,Exception,Extension Methods,我使用以下扩展方法()将现有的可枚举项拆分为两个: public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> list, int parts) { int i = 0; var splits = from item in list group item by i++ % parts into part
public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> list, int parts)
{
int i = 0;
var splits = from item in list
group item by i++ % parts into part
select part.AsEnumerable();
return splits;
}
公共静态IEnumerable拆分(此IEnumerable列表,int部分)
{
int i=0;
var splits=来自列表中的项
按i++%零件将项目分组为零件
选择part.AsEnumerable();
返回分裂;
}
我使用的方法如下:
//accountIds is simply an IEnumerable<string>
var foo = accountIds.Split(2).ToList();
//accountId只是一个IEnumerable
var foo=accountIds.Split(2.ToList();
当我运行我的应用程序时,这个方法似乎工作得很好。但是,当我调试应用程序时,这行代码总是引发异常:
对象引用未设置为对象的实例。
我很困惑为什么这个方法只在我调试时抛出一个异常。我不确定这一点,但我认为您应该首先评估它。您可以使用
.ToArray()
或.ToList()
方法
查看Jon Skeet捕获的变量。在查询中变异变量是最糟糕的做法。首先不要这样做。我不知道它为什么会崩溃,但是有更好的方法来分割序列。你有没有查看你的
foo
里面是否有元素?@FreddieFabregas-如果我删除.ToList()
call我避免了异常,返回了两个枚举数,每个枚举数约1300个元素。您是否试图缩小问题范围,并将其与当前项目隔离开来?我创建了同样的东西,没有问题,但我不知道AccountID到底是什么样子,所以我只能猜测。@Corylulu-是的。我应该说得更具体些,但是,accountIds
不过是一个字符串列表。我真正的项目示例非常简单。对不起,我不太理解。我已经在调用.ToList()
,这导致了错误。或者你是说我应该在扩展方法内部调用.ToList()
?将逻辑颠倒为:var foo=accountIds.ToList().Split(2);