2011-10-14 30 views
1

我有一個列表和列表的計數我4.現在我想要得到一個特定的字符串,並從列表中刪除它。我嘗試了一些代碼,我認爲這已經足夠了,但是我的錯誤。我想我很近。 「navn」是從文本框中實現的名稱。 「字符串」是我的列表字符串..列表<string>如何獲得特定的字符串

if (strings.Contains(navn, StringComparer.OrdinalIgnoreCase)) 
{ 
    Console.WriteLine("going inside"); 
    strings.Remove(navn); 
    listBox_varer.Items.Clear(); 
    string pr = ""; 
    int i = 0; 
    for (i = 0; i <= (strings.Count - 1); i++) 
    { 
     pr = strings[i] + "\n"; 
     listBox_varer.Items.Add(pr); 
    } 
    } 
    else 
    { 
    Console.WriteLine("going in else"); 
    } 
+0

那麼什麼是不工作? –

+0

輸出寫入「進入其他」,當我確定有一個字符串在列表中.. :) –

+0

你有沒有在調試器中的代碼? – Tim

回答

2

您的代碼與忽略大小寫比較,但remove方法沒有。我會做這樣的事情:

string match = strings.FirstOrDefault(c => String.Equals(c, navn, StringComparison.InvariantCultureIgnoreCase)); 
if (match != null) 
{ 
    Console.WriteLine("going inside"); 
    strings.Remove(match); 
    listBox_varer.Items.Clear(); 
    for (int i = 0; i <= (strings.Count - 1); i++) 
    { 
     string pr = string.Concat(strings[i], Environment.NewLine); 
     listBox_varer.Items.Add(pr); 
    } 
} 
else 
{ 
    Console.WriteLine("going in else"); 
} 
+0

它沒有工作。仍然得到「去其他」.. –

+0

@AndersJensen然後你還沒有提供足夠的代碼。該錯誤是其他地方然後 –

+0

它不能,因爲我寫了一些控制檯writelines,並且我的輸出顯示,一切都好。所以我不知道( –

1

的問題是,你已經找到忽略的情況下StringComparer.OrdinalIgnoreCase的項目。因此,您發現"foo"忽略了("Foo", "Bar")中的情況,並且您試圖刪除不在列表中的"foo"

儘量不要忽略大小寫或使用LINQ

strings.RemoveAll(s => 
    String.Equals(s, navn, StringComparison.OrdinalIgnoreCase)); 
+3

這是一些不好的建議'String.Equals( a,b,StringComparison.OrdinalIgnoreCase)''這樣就好了 – sehe

+0

@sehe我同意這也使得不可能使用他現在使用的if/else結構 –

+0

我同意我修改了代碼 - 將2字符串轉換爲lower並且比較它們是不必要的開銷。我希望'''String.Equals'以一種聰明的方式實現:]初學者的錯誤:( –

1

假設你的問題是有列表框反映不斷變化的名單,我要給你一個簡短的解決方案:

 ObservableCollection<string> strings = new ObservableCollection<string>(); 
     listBox.DataSource = strings; 
     strings.Remove(navn); 
1

我認爲strings.RemoveRemove函數不能比較OrdinalIgnoreCase

for(i=0;i<strings.Count-1;i++){ 
    if(strings[i].Equals(navn,StringComparer.OrdinalIgnoreCase)){ 
     strings.RemoveAt(i); 
     break; 
    } 
} 
0

如果你的問題是,你不能保證在正確的情況下進入到被remved的價值,那麼這將幫助你:

 var entryToRemove = strings.FirstOrDefault(item => item.ToUpper(CultureInfo.InvariantCulture) == navn.ToUpper()); 
     if (entryToRemove != null) 
     { 
      strings.Remove(entryToRemove); 
     } 
相關問題