2011-05-08 20 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