我想创建IEnumerable<T>
的实例 - 我可以通过创建类似
public IEnumerator<T> MakeEnumerator(){
yield return 1;
}
但我需要将此Enumerator传递给另一个类,因此想看看我是否可以使用委托创建此内联
可能吗
编辑:我想删除的内容是这样的:
new CustomClass(MakeEnumerator())
并替换为
new CustomClass(delegate... ) // The method is now inline
答案 0 :(得分:3)
迭代器方法不能内联,因为匿名方法所涉及的代码魔法不支持创建迭代器方法时涉及的代码魔法,反之亦然。迭代器方法必须是一个单独的方法,至少在当前版本的C#中。
但是,如果你需要的只是可以通过枚举的东西,你可以简单地使用一个数组。
因此,使用可枚举的集合调用方法Test:
Test(new[] { 1 });
如果您需要IEnumerator<T>
而不是IEnumerable<T>
,只需在将其传递给方法之前调用GetEnumerator
:
Test(new[] { 1 }.GetEnumerator());
答案 1 :(得分:0)
代理无法实现接口,因此无法传递它们而不是IEnumerator接口。只有你可以做的是传递委托的返回值 - 即:
var fuu = new CustomClass(Enumerable.Range( 1, 1 ))