我有一个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");
}
答案 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);
}