IEnumerable与yield return和VS Quickwatch崩溃

时间:2013-04-09 11:14:33

标签: c# visual-studio-2012 ienumerable yield-return

我有以下方法返回IEnumerable

public IEnumerable<ExternalFilter> GetExternalFilters()
{
    if (externalfilters == null)
        yield break;
    foreach (ExternalFilter filter in externalfilters)
        yield return filter;
}

如果我在VS Quickwatch中查看GetExternalFilter,在展开集合时,调试中程序会立即崩溃,而Quickwatch则不会显示任何内容。

使用Quickwatch消息Count()

评估该集合的Function evaluation was aborted.时的情况与此相同

我需要使用此功能吗?

2 个答案:

答案 0 :(得分:1)

只是预感:也许您的枚举externalfilter只能评估一次? (例如,由于数据来源)。

这意味着只要您尝试使用QuickWatch重新评估GetExternalFilters的结果,它就会失败。

如果externalfilter不仅仅是一个可枚举的,而是一个简单的List<T>,那么你的问题就在于其他地方。

答案 1 :(得分:1)

我相信你的参数externalfilters不是线程安全的。

您是否从其他线程更新参数?

如果是,请使用lock更新列表并从中读取。