无法对泛型列表使用.Any()
本文关键字:Any 列表 泛型 | 更新日期: 2023-09-27 18:21:30
我在控制器中有以下代码,我正在调用一个服务操作,该操作将返回List
我想用回应。Customers.Any(),因为我正在寻找特定的客户。但有时.Any()不存在。当我使用.Any().时,它会产生编译错误
不确定这是否取决于我调用操作的方式?因为我一直认为我们可以使用.Any()作为泛型列表
控制器
public class Customer
{
public Customer(ICustomerService customerService)
{
this.CustomerService = customerService;
}
private ICustomerService CustomerService { get; set; }
var response = this.ExecuteServiceCall(() => this.CustomerService.getCustomerResults());
response.customers.Any(x => x.group == "A");
}
Any
是IEnumerable<T>
接口的扩展方法,但其实现位于System.Linq
命名空间中的静态Enumerable
类中。它看起来像这样:
using System;
namespace System.Linq
{
public static class Enumerable
{
...
public static bool Any<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate)
{
foreach (var item in source)
{
if (predicate(item))
{
return true;
}
}
return false;
}
...
}
}
如果要将using System.Linq;
语句用作扩展方法,则需要添加它。
或者,为了便于理解,您可以将其称为
bool b = System.Linq.Enumerable.Any(response.customers, x => x.group == "A");
确保您的类中包含System.Linq,以便能够使用.Any()
using System.Linq;
您必须首先包含名称空间System.Linq
。
然后,如果您的response.customers
-
实现
IEnumerable<T>
,你应该很好去。 -
显式实现
IEnumerable<T>
,您需要将其转换为所需的接口:bool hit = ((IEnumerable<Customer>)(response.customers)) .Any( x => x.group == "A" ) ;
-
不实现
IEnumerable<T>
,但实现了非通用IEnumerable
,您需要以不同的方式进行转换:bool hit = response.customers .Cast<Customer>() .Any( x => x.group == "A" ) ;
客户列表是返回对象的属性,还是对象本身?像这样的东西行吗?
var customers = this.ExecuteServiceCall(() => this.CustomerService.getCustomerResults());
if (customers.Any(c => c.group == "A")
{
. . .
}