这是检查列表中所有项目是否相同的 Linq 方法。
if (list.Distinct().Skip(1).Any())
但不适用于早于 .NET 3.5 开发的应用程序以非 Linq 方式执行此操作的最佳最佳方法是什么。
这是检查列表中所有项目是否相同的 Linq 方法。
if (list.Distinct().Skip(1).Any())
但不适用于早于 .NET 3.5 开发的应用程序以非 Linq 方式执行此操作的最佳最佳方法是什么。
那么你可以这样做:
public bool AllEqual<T>(IEnumerable<T> items)
{
// This could be a parameter if you want
var comparer = EqualityComparer<T>.Default;
using (var iterator = items.GetEnumerator())
{
if (!iterator.MoveNext())
{
return true; // Empty sequence
}
var first = iterator.Current;
while (iterator.MoveNext())
{
if (!comparer.Equals(first, iterator.Current))
{
return false;
}
}
}
return true;
}
这适用于所有序列类型,而不仅仅是列表。对于列表,它实际上稍微简单一些:
public bool AllEqual<T>(IList<T> items)
{
// This could be a parameter if you want
var comparer = EqualityComparer<T>.Default;
for (int i = 1; i < items.Count; i++)
{
if (!comparer.Equals(items[0], items[i]))
{
return false;
}
}
}
使用简单的 For 循环。
var allSame = true;
for(int i=1 ; i < list.Count ; i++)
{
if ( list[0] != list[i] )
{
allSame = false;
break;
}
}
如果你想在 .NET 2.0 中使用 Linq,你可以使用LinqBridge。
但是您的 LINQ 查询本身并不是最优的。最好是 For 循环。更好的 LINQ 查询是
list.Skip(1).Any( item => item != list[0]);
有点短的东西:
public static bool AllSame<T>(List<T> list)
{
return list.Count == 0 || list.FindAll(delegate(T x)
{ return !EqualityComparer<T>.Default.Equals(x, list[0]); }).Count == 0;
}
使用新的 Framework 2.0 项目在 VS2012 上进行测试。