我需要检查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;
我在做什么错了?
答案 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
),而只是想知道是否至少有一个类型,则仍然可以使用Cast
和Any
,因为{ {1}}始终有效:
Object