我有这段代码:

    public IEnumerable<int> Iterator {
        get { if (false) yield return -1; }
    }

这是相当丑陋的,但当你试图将其重构为:

    public IEnumerable<int> Iterator {
        get { return null; }
    }

以下代码中断:

foreach (var item in obj.Iterator) {
}

你会如何清理它?

有帮助吗?

解决方案

顺便提一下,.NET框架已经有了一种方法可以做到这一点(使Jared的代码变得多余): System.Enumerable.Empty<T>

其他提示

public IEnumerable<int> Iterator {
    get { yield break; }
}

更好的解决方案是为此问题定义可重用的方法。我在共享库中保留了一个方法来处理这种情况。

public static class CollectionUtility { 
  public static IEnumerable<T> CreateEmptyEnumerable<T>() {
    yield break;
  }
}

现在在你的方法中你可以打电话

public static IEnumerable<int> Iterator { 
  get { return CollectionUtility.CreateEmptyEnumerable<int>(); }
}
  public IEnumerable<int> Iterator {
        get { yield break; }
    }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top