使用忽略符号比较字符串列表中的字符串而不使用foreach

时间:2017-09-28 06:30:31

标签: c#

我正在尝试比较字符串列表中的字符串,我想使用“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");
}

4 个答案:

答案 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循环中断。