List <string>如何获取特定字符串</string>

时间:2011-10-14 07:59:41

标签: c# visual-studio list

我有一个List,以及列表的计数i 4.现在我想获得一个特定的字符串,并将其从列表中删除。我试过一些代码,我认为这已经足够了,但我的错误。我想我很亲密。 “navn”是从文本框中获得的名称。 “strings”是我的List字符串..

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");
   }

5 个答案:

答案 0 :(得分:2)

您的代码与ignore case进行比较,但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");
 }

答案 1 :(得分:1)

问题是您发现项目忽略了案例StringComparer.OrdinalIgnoreCase。因此,您发现"foo"忽略了("Foo", "Bar")中的案例,并且您尝试删除列表中没有的"foo"

尽量不要忽略这种情况或使用LINQ

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

答案 2 :(得分:1)

假设您的问题是让列表框反映您对列表的更改,我会为您提供一个简短的解决方案:

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

答案 3 :(得分:1)

我认为strings.Remove Remove功能不能与OrdinalIgnoreCase进行比较。

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

答案 4 :(得分:0)

如果您的问题是,您无法确保在正确的情况下输入要删除的值,那么这将有助于您:

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