Список <string>как получить конкретную строку - PullRequest
1 голос
/ 14 октября 2011

У меня есть список, и счет списка я 4. Теперь я хочу получить определенную строку и удалить ее из списка. Я попытался с некоторым кодом, и я подумал, что этого достаточно, но моя ошибка. Я думаю, что я близко. «navn» - это имя, которое достигается из текстового поля. "строки" - это строки моего списка.

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 ]

2 голосов
/ 14 октября 2011

Ваш код сравнивается с регистром игнорирования, а метод удаления - нет.Я бы сделал что-то вроде этого:

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 голос
/ 14 октября 2011

Я думаю, strings.Remove Remove функция не сравнивается с OrdinalIgnoreCase.

for(i=0;i<strings.Count-1;i++){
   if(strings[i].Equals(navn,StringComparer.OrdinalIgnoreCase)){
      strings.RemoveAt(i);
      break;
   }
}
1 голос
/ 14 октября 2011

Предполагая, что ваша проблема заключается в том, что список должен отражать ваше изменение в списке, у меня есть краткое решение для вас:

        ObservableCollection<string> strings = new ObservableCollection<string>();
        listBox.DataSource = strings;
        strings.Remove(navn);
1 голос
/ 14 октября 2011

Проблема в том, что вы нашли элемент, игнорирующий регистр StringComparer.OrdinalIgnoreCase. Итак, вы нашли "foo" игнорирующим регистр в ("Foo", "Bar") и пытаетесь удалить "foo", которого нет в списке.

Старайтесь не игнорировать случай или используйте LINQ

strings.RemoveAll(s => 
  String.Equals(s, navn, StringComparison.OrdinalIgnoreCase));
0 голосов
/ 14 октября 2011

Если ваша проблема заключается в том, что вы не можете гарантировать, что значение, подлежащее возврату, введено в правильном регистре, то вам поможет:

        var entryToRemove = strings.FirstOrDefault(item => item.ToUpper(CultureInfo.InvariantCulture) == navn.ToUpper());
        if (entryToRemove != null)
        {
            strings.Remove(entryToRemove);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...