检查所有元素是否等于

时间:2018-10-19 14:51:44

标签: c# .net linq

我需要检查list是否具有任何元素,而我的操作方式是使用Any()

    public static string ToQuotedString(this IEnumerable list)
    {
        if (!list.Any())
        {
            return string.Empty;
        }

        var output = string.Empty;

        foreach (var item in list)
        {
            output += "'" + item + "',";
        }

        return output.TrimEnd(',');
    }

我遇到以下异常:

'IEnumerable' does not contain a definition for 'Any' and no accessible extension method 'Any' accepting a first argument of type 'IEnumerable' could be found (are you missing a using directive or an assembly reference?)

我引用的是System.Linq

using System.Linq;

enter image description here

我在做什么错了?

2 个答案:

答案 0 :(得分:3)

如果您使用的是非通用枚举器,则检查任何元素的最便宜方法是检查是否有第一个元素。

在这种情况下,hasAny为假:

var collection= new List<string>( ) as IEnumerable;
bool hasAny = collection.GetEnumerator().MoveNext();

在这种情况下,确实如此:

var collection= new List<string>{"dummy"} as IEnumerable;
bool hasAny = collection.GetEnumerator().MoveNext();

答案 1 :(得分:3)

您的参数是IEnumerable而不是IEnumerable<T>,但是LINQ extension methods是后者的参数。因此,可以将参数的类型更改为IEnumerable<string>或使用Cast

if (!list.Cast<string>().Any())
{
    return string.Empty;
}

如果您不知道类型(在这种情况下为string),而只是想知道是否至少有一个类型,则仍然可以使用CastAny,因为{ {1}}始终有效:

Object