2011-09-23 55 views
0

試圖找出如何檢查下一個字符串與當前字符串在一個循環(僞代碼):檢查下一個字符串

string currentName = string.Empty; 

for(int i=0; i < SomeList.Count; i++) 
{ 
    currentName = SomeList[i].Name; 

    //do some other logic here 

    if(string.Compare(SomeList[i].Name, SomeList[i+1].Name) == 0) 
     // do something 
} 

這似乎並沒有工作:

if(string.Compare(SomeList[i].Name, SomeList[i+1].Name) 

我想看看當前字符串是否與循環中下一個迭代之前循環中的下一個字符串相同。

+2

1)SomeList [i] .Name == SomeList [i + 1] .Name'有什麼問題? 2)如何處理最後一個元素? – NullUserException

+0

它不起作用? – BoltClock

+0

它應該在列表中工作。更好的方法是使用先前的值和第一個元素的單獨大小來檢查當前值,以便在重複名稱到達時執行邏輯。 –

回答

3

你就近了。當你到達最後一個元素時,你會得到一個IndexOutOfRangeException,因爲你正在試圖檢查下面的元素(固有的,沒有)。

只要改變

for(int i=0; i < SomeList.Count(); i++) 

for(int i=0; i < SomeList.Count() - 1; i++) 
+0

i = SomeList.Count(); i> = 0; i-- – Independent

+0

是的,但是這樣做你永遠不會到達最後一個元素(例如:'//在這裏做一些其他邏輯部分) – NullUserException

0

它可能拋出IndexOutOfRangeException,不是嗎?你必須在上端看你的邊界情況:

if (i != SomeList.Count - 1 && 
    string.Compare(SomeList[i].Name, SomeList[i+1].Name) == 0) 
{ 
    // Do something 
} 
0

我建議你碰到的索引計數器從1開始,並做比較SomeList [I-1],SomeList [I]這樣你沒有得到IndexOutOfRangeException

此外,這是區分大小寫的匹配,請調用ToUpper()方法以確保進行不區分大小寫的匹配。

+0

或者你可以使用'String.Compare(x,y,true) '; – NullUserException