比较C#中的多个字符串

时间:2012-12-03 23:03:48

标签: c# string compare

我希望能够将多个字符串相互比较,如果它们全部相等则返回true。如果任何字符串等于“N / A”,则在比较中将忽略它们。例如:

string1 = "hi";
string2 = "hi";
string3 = "hi";
string4 = "N/A";

会返回true,但是:

string1 = "hi";
string2 = "hey";
string3 = "hi";
string4 = "hi";

会返回false

感谢您的帮助。

3 个答案:

答案 0 :(得分:6)

if (myStrings.Where(s => s != "N/A").Distinct().Count() > 1)

答案 1 :(得分:3)

假设您已将字符串存储在数组或列表之类的集合中,则可以使用Enumerable.All

string first = strings.FirstOrDefault(s => s != "N/A");
bool allEqual = first == null ||  strings.All(s => s == "N/A" || s == first);

解释:您可以将所有字符串与您选择的字符串进行比较(我采用第一个字符串),如果不同,则allEqual必须为false。我需要使用FirstOrDefault,因为所有字符串都可能是“N / A”或列表为空,然后First会抛出异常。

DEMO

答案 2 :(得分:0)

问题已经回答,但我想我会说明最明显的代码:

bool notEqual = false;
for (int i = 0; i < list.Count - 1; i++) {
   for (int j = i + 1; j < list.Count; j++) {
      if (!(list[i].Equals(list[j])) {
         notEqual = true;
         break;
      }
   }
}

这个想法很简单。使用第一个元素,您必须查看下一个(length - 1)元素。但是,对于第二个元素,您已经将它与第一个元素进行了比较,因此您可以查看下一个(length - 2)元素。你的结尾是长度 - 1,因为那时你要比较倒数第二个和最后一个元素,这是最后可能的比较。

无论如何,上述答案更加简洁/优雅。这只是为了向您展示在最基本的C#-wise方面实际发生的事情。