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");
}
您的代码与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.Remove
和Remove
的功能比不上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);
}