2013-03-29 79 views
1

我有一個C#集合,我想知道是否有可能使用Python的.next()方法訪問下一個類似於可能的值。例如我可以在不使用c#中的foreach的情況下輕鬆訪問下一個迭代嗎?

double diffFoo = myList.next() - myObject.Foo; 
double diffBar = myList.next() - myObject.Bar; 
... 

代替,

double diffFoo = myList[0] - myObject.Foo; 
double diffBar = myList[1] - myObject.Bar; 
... 

在這種情況下,由於不同的類的方法是在每個「迭代」中使用的foreach環是不恰當的。我想這樣做是爲了避免在訂單需要在代碼中更改時必須更新索引。

+0

是的,但你可能會最終使用'while循環'和'GetEnumerator'方法,然後使用.MoveNext()方法你會喜歡一個例子..? – MethodMan

+0

這個建議的解決方案解決什麼是真正的業務問題? –

+0

@Pieter用於定義一堆類以讀取具有相似列但排序不同的不同.csv文件。使用迭代器方法,我可以剪切並粘貼到一個新類中,並交換/添加/刪除行,直到匹配。沒有迭代器,我也必須設置索引,這很耗時。 – Brendan

回答

1

您可以使用枚舉從列表中,如果你喜歡:

var s = new List<string>() { "A", "B", "C" }; 
var enumerator = s.GetEnumerator(); 
enumerator.MoveNext(); 
Debug.WriteLine(enumerator.Current); 
enumerator.MoveNext(); 
Debug.WriteLine(enumerator.Current); 
+0

只是一個警告 - 除了從'string []'獲得枚舉數時,我必須在其中放置'.Cast ()',以便結果不是通用對象。 (我意識到這個問題意味着一個通用列表,但在我的實際代碼中它是一個字符串數組)。 – Brendan

0

IEnumerator接口提供了一種名爲GetNext()的方法。您可以從集合中獲取下一個項目。還有IEnumerator的通用版本:IEnumerator,請參閱here

查看here僅供參考。

0

您應該閱讀有關IEnumerableIEnumerable<T>IEnumerator接口。他們使用foreach循環。

您可以調用GetEnumerator上的collection來獲得枚舉器實例。有了這個,你可以使用MoveNext()方法和Current屬性。

0

像這樣的東西可以工作

var someEnumerator = getInt().GetEnumerator(); 
while(someEnumerator.MoveNext()) 
{ 
    int intEnumerate = someEnumerator.Current; 
    Console.WriteLine(intEnumerate); 
} 
2

不要忽略了低技術含量的解決方案:

int index = 0; 
double diffFoo = myList[index++] - myObject.Foo; 
double diffBar = myList[index++] - myObject.Bar; 
+0

啊,這太棒了!應該想到那個... – Brendan

2

您可以使用IEnumerator.MoveNext方法。

var enumerator = myList.GetEnumerator(); 

enumerator.MoveNext(); 
double diffFoo = enumerator.Current - myObject.Foo; 

enumerator.MoveNext(); 
double diffBar =enumerator.Current - myObject.Bar; 
相關問題