我正在尝试比较字符串列表中的字符串,我想使用“IgnoreSymbols”比较选项。没有字符串列表的“foreach”有没有方法?
List<string> lstString = new List<string> { "Hello [T]", "XYA" };
string str = "Hello (T)";
var Y = String.Compare(str, lstString.Any(e => e.ToString()), CultureInfo.InvariantCulture, CompareOptions.IgnoreSymbols);
if (Y == 0)
{
Console.WriteLine("equal");
}
答案 0 :(得分:4)
根据我的理解,您想知道列表是否包含与搜索字符串(str
)相等的字符串,忽略符号。
您可以使用Any
:
var lstString = new List<string> { "Hello [T]", "XYA" };
var str = "Hello (T)";
var Y = lstString.Any(s => String.Compare(s, str, CultureInfo.InvariantCulture, CompareOptions.IgnoreSymbols) == 0);
if (Y)
{
Console.WriteLine("Found");
}
答案 1 :(得分:4)
您可以使用LINQ,一般情况下,您接近自己的想法,只需将Any
切换为String.Compare
。
像这样:
var y = lstString.Any(e => string.Compare(str, e, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.CompareOptions.IgnoreSymbols) == 0);
答案 2 :(得分:2)
这是你正在寻找的吗?你可以使用投影并做任何你想做的事。
List<string> lstString = new List<string> { "Hello [T]", "XYA" };
string str = "Hello (T)";
var Y = lstString.Select(e => String.Compare(str, e, CultureInfo.InvariantCulture, CompareOptions.IgnoreSymbols));
if (Y.Contains(0))
{
Console.WriteLine("equal");
}
或
List<string> lstString = new List<string> { "Hello [T]", "XYA" };
string str = "Hello (T)";
var Y = lstString.Any(e => String.Compare(str, e, CultureInfo.InvariantCulture, CompareOptions.IgnoreSymbols) == 0);
if (Y)
{
Console.WriteLine("equal");
}
编辑@Bojan B建议:)谢谢:))
答案 3 :(得分:1)
你可以使用它 -
var result = lstString.Any(x => Regex.Replace(x, @"[^0-9a-zA-Z]+", "").Equals(Regex.Replace(str, @"[^0-9a-zA-Z]+", "")));
if(result)
{
// Write code here
}
但仔细查看我认为使用foreach
或写入会导致相同的执行时间,如果您从foreach
循环中断。