我有一个extensions数组,我必须使用lambda表达式找出数组中的所有元素具有相同的值还是不同的值。我已经写了下面的代码,它总是让我 true 。在以下扩展名数组中,它应返回 false ,因为.bmp是与其他扩展名不同的扩展名。你能帮我完成任务吗?
string[] extensions = { ".doc", ".doc", ".bmp" };
var result = extensions.All(x => extensions.Contains(x));
答案 0 :(得分:4)
您正在检查数组中是否包含所有项目,这是正确的。
您要
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
使用Distinct
的其他方法(效率不高):
var allSame = !extensions.Distinct().Skip(1).Any();
答案 1 :(得分:0)
区分大小写的比较:
string[] extensions = { ".doc", ".doc", ".bmp" };
bool hasSameExtensions = extensions.Distinct().Count() == 1;
不区分大小写的比较:
string[] extensions = { ".doc", ".doc", ".DOC" };
bool hasSameExtensions = extensions.Distinct(StringComparer.OrdinalIgnoreCase).Count() == 1;