Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 扩展方法仅在调试时引发异常_C#_Exception_Extension Methods - Fatal编程技术网

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);