【问题标题】:Extension method throws exception only when debugging扩展方法仅在调试时抛出异常
【发布时间】:2013-02-27 03:04:59
【问题描述】:

我正在使用以下扩展方法 (from an existing StackOverflow question) 将现有的可枚举拆分为两个:

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

我正在使用这样的方法:

//accountIds is simply an IEnumerable<string>
var foo = accountIds.Split(2).ToList();

当我运行我的应用程序时,该方法似乎运行良好。但是,当我调试我的应用程序时,这行代码总是会引发异常:

Object reference not set to an instance of an object.

我很困惑为什么这个方法只在我调试的时候抛出异常。

【问题讨论】:

  • 在查询中改变变量是最糟糕的做法。首先不要这样做。为什么它会崩溃我不知道,但有更好的方法来拆分序列。
  • 你看你的foo里面有没有元素?
  • @FreddieFabregas - 如果我删除 .ToList() 调用,我会避免异常,我会返回两个可枚举,每个都有 ~1300 个元素。
  • 您是否尝试过缩小问题范围并将其与当前项目隔离开来?我创建了同样的东西,没有任何问题,但我不知道 accountIds 到底长什么样,所以我只能猜测。
  • @Corylulu - 是的。我应该更具体一些,但是,accountIds 只不过是一个字符串列表。我的真实项目示例非常简单。

标签: c# exception extension-methods


【解决方案1】:

对此我不确定,但我认为您应该先评估一下。您可以使用.ToArray().ToList() 方法。

查看 Jon Skeet blog 捕获的变量。

【讨论】:

  • 对不起,我不太明白。我已经打电话给.ToList(),这会导致错误。还是说我应该在扩展方法中调用.ToList()
  • 将逻辑反转为:var foo = accountIds.ToList().Split(2);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2016-11-24
  • 2020-11-11
  • 2012-11-22
  • 2016-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多