Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 非Linq检查列表项的方式相同_C#_.net_Linq_List_Linqbridge - Fatal编程技术网

C# 非Linq检查列表项的方式相同

C# 非Linq检查列表项的方式相同,c#,.net,linq,list,linqbridge,C#,.net,Linq,List,Linqbridge,这是检查列表中所有项目是否相同的Linq方法 if (list.Distinct().Skip(1).Any()) 但对于早于.NET3.5开发的应用程序不起作用 以非Linq方式执行此操作的最佳方式是什么。您可以这样做: public bool AllEqual<T>(IEnumerable<T> items) { // This could be a parameter if you want var comparer = EqualityCompa

这是检查列表中所有项目是否相同的Linq方法

if (list.Distinct().Skip(1).Any())
但对于早于.NET3.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(IEnumerable items)
{
//如果需要,这可以是一个参数
var comparer=EqualityComparer.Default;
使用(var iterator=items.GetEnumerator())
{
如果(!iterator.MoveNext())
{
返回true;//空序列
}
var first=iterator.Current;
while(iterator.MoveNext())
{
如果(!comparer.Equals(first,iterator.Current))
{
返回false;
}
}
}
返回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;
        }
    }
}
public bool AllEqual(IList项目)
{
//如果需要,这可以是一个参数
var comparer=EqualityComparer.Default;
对于(int i=1;i
使用简单For循环

var allSame = true;
for(int i=1 ; i < list.Count ; i++)
{
   if ( list[0] != list[i] )
   { 
     allSame = false;
     break;
   }
}

稍微短一点的:

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;
}
公共静态bool AllSame(列表)
{
return list.Count==0 | | list.FindAll(委托(tx))
{return!EqualityComparer.Default.Equals(x,list[0]);}.Count==0;
}

在VS2012上使用新的Framework 2.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;
}