List< string>如何获得一个特定的字符串

本文关键字:一个 字符串 string 何获得 List | 更新日期: 2023-09-27 18:11:18

我有一个列表,列表的计数是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");
   }

List< string>如何获得一个特定的字符串

您的代码与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");
 }

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

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

我认为strings.RemoveRemove的功能比不上OrdinalIgnoreCase

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

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

尽量不要忽略大小写或者使用LINQ

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

如果您的问题是,您不能确保要删除的值以正确的大小写输入,那么这将帮助您:

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