C# 检查字符串数组是否具有相同的字符串值或未使用Lambda表达式

C# 检查字符串数组是否具有相同的字符串值或未使用Lambda表达式,c#,lambda,C#,Lambda,我有一个扩展数组,我必须使用lambda表达式找出数组中的所有元素是具有相同的值还是具有不同的值。我已经写了下面的代码,它总是返回给我true。在下面的扩展数组中,它应该返回mefalse,因为.bmp与其他扩展不同。你能帮我完成这项任务吗 string[] extensions = { ".doc", ".doc", ".bmp" }; var result = extensions.All(x => extensions.Contains(x)); 您正在检查数组中的所有项是

我有一个扩展数组,我必须使用lambda表达式找出数组中的所有元素是具有相同的值还是具有不同的值。我已经写了下面的代码,它总是返回给我true。在下面的扩展数组中,它应该返回mefalse,因为.bmp与其他扩展不同。你能帮我完成这项任务吗

  string[] extensions = { ".doc", ".doc", ".bmp" };
  var result = extensions.All(x => extensions.Contains(x));

您正在检查数组中的所有项是否都包含在此数组中,这当然是真的

你想要:

string firstExt = extensions.First();
var allSame = extensions.Skip(1).All(x => firstExt == x); // use String.Equals(s1,s2,StringComparison.InvariantCultureIgnoreCase) if you want to compare in a case insensitive manner
另一种使用
不同的
(效率不高):


您正在检查数组中的所有项是否都包含在此数组中,这当然是真的

你想要:

string firstExt = extensions.First();
var allSame = extensions.Skip(1).All(x => firstExt == x); // use String.Equals(s1,s2,StringComparison.InvariantCultureIgnoreCase) if you want to compare in a case insensitive manner
另一种使用
不同的
(效率不高):


区分大小写的比较:

string[] extensions = { ".doc", ".doc", ".bmp" };
bool hasSameExtensions = extensions.Distinct().Count() == 1;
string[] extensions = { ".doc", ".doc", ".DOC" };
bool hasSameExtensions = extensions.Distinct(StringComparer.OrdinalIgnoreCase).Count() == 1;
不区分大小写的比较:

string[] extensions = { ".doc", ".doc", ".bmp" };
bool hasSameExtensions = extensions.Distinct().Count() == 1;
string[] extensions = { ".doc", ".doc", ".DOC" };
bool hasSameExtensions = extensions.Distinct(StringComparer.OrdinalIgnoreCase).Count() == 1;

区分大小写的比较:

string[] extensions = { ".doc", ".doc", ".bmp" };
bool hasSameExtensions = extensions.Distinct().Count() == 1;
string[] extensions = { ".doc", ".doc", ".DOC" };
bool hasSameExtensions = extensions.Distinct(StringComparer.OrdinalIgnoreCase).Count() == 1;
不区分大小写的比较:

string[] extensions = { ".doc", ".doc", ".bmp" };
bool hasSameExtensions = extensions.Distinct().Count() == 1;
string[] extensions = { ".doc", ".doc", ".DOC" };
bool hasSameExtensions = extensions.Distinct(StringComparer.OrdinalIgnoreCase).Count() == 1;

您可以使用
.Distinct()
并检查长度。如果值为1,则所有值都相同;如果值大于1,则值不同。可以使用
.Distinct()
并检查长度。如果值为1,则所有值都相同;如果值大于1,则有不同的值。@sanisinghhutunen:甚至比source或IL更好,因为如果在那里提到它,它在将来的实现中不会改变,并且您可以依赖它:“一旦结果确定,源的枚举就会停止。”@Sanisinghhutunen:甚至比source或IL更好,因为如果在这里提到它,它在未来的实现中不会改变,您可以信赖它:“一旦确定了结果,就会停止对source的枚举。”