2011-05-08 46 views
1

我想创建的IEnumerable<T>一个实例 - 我能做到这一点通过创建像移动法在线 - ReSharper的可能

public IEnumerator<T> MakeEnumerator(){ 
    yield return 1; 
} 

的方法,但我需要将此枚举传递给另一个类,因此想看看是否我可以委托

创建此直列这是可能的

编辑:我想删除是这样的:

new CustomClass(MakeEnumerator()) 

new CustomClass(delegate... ) // The method is now inline 
+1

请阅读http://stackoverflow.com/editing-help,如果你没有正确格式化你的代码块(你有什么,120多个问题?),你的通用代码将看起来非泛型。 – BoltClock 2011-05-08 11:33:18

+0

好点 - 抱歉的错字 - 感谢您的更新 – 2011-05-08 11:37:35

+0

你是什么意思“内联委托”,是你的问题如何传递一些可以枚举的东西,包含单个整数值1,而不必创建方法? – 2011-05-08 11:38:50

回答

0

Test(new[] { 1 }); 

如果你需要一个IEnumerator<T>而不是IEnumerable<T>,只需将它传递给方法之前调用GetEnumerator委托人不能实现接口,所以他们不能通过而不是IEnumerator接口。只有您可以做的是代表的回传价值 - 例如:

var fuu = new CustomClass(Enumerable.Range(1, 1)) 

3

的迭代方法代替不能在线制成,原因很简单,这是参与匿名方法的代码魔不支持代码魔术创造迭代方法时所涉及, 或相反亦然。迭代器方法必须是是一个单独的方法,至少在当前版本的C#中。

但是,如果您只需要,那么可以通过进行枚举,您可以简单地使用一个数组。

因此,调用方法测试,用枚举集合:

Test(new[] { 1 }.GetEnumerator()); 
+0

嗨 - 它不像创建一个包含一个项目的数组那么东西 - 迭代器中有一些逻辑,我想知道您是否可以像Java那样做并拥有匿名方法 – 2011-05-08 11:46:38

+0

该细节在您的问题,但不,你不能。正如我所说的,你不能将匿名方法和迭代器方法结合起来。 – 2011-05-08 11:51:32

相关问题