C# 使用泛型函数测试模型列表是否有任何条目或是否为空时出现问题

C# 使用泛型函数测试模型列表是否有任何条目或是否为空时出现问题,c#,generics,C#,Generics,我正在尝试使用泛型函数来简化一些代码。。。函数的目的是测试传递给它的列表(通常是模型列表)是否有任何条目或是否为空。。。当我尝试使用我编写的函数时,它给出了错误: 类型列表不能用作泛型类型或方法HasEntries(T)中的类型参数“T”。没有从List到List的隐式引用转换 我不太确定如何恰当地编写泛型函数 我的职能如下: private static bool HasEntries<T>(T toTest) where T : List<T> {

我正在尝试使用泛型函数来简化一些代码。。。函数的目的是测试传递给它的列表(通常是模型列表)是否有任何条目或是否为空。。。当我尝试使用我编写的函数时,它给出了错误:

类型
列表
不能用作泛型类型或方法
HasEntries(T)
中的类型参数“T”。没有从
List
List
的隐式引用转换

我不太确定如何恰当地编写泛型函数

我的职能如下:

    private static bool HasEntries<T>(T toTest) where T : List<T>
    {
        return toTest?.Any() ?? false;
    }
其中,weeWoo属于以下类型:

List<FooBarModel>();
List();
编辑: 为了澄清,FooBarModel和其他代替T的东西通常是MVC的类模型

private static bool HasEntries<T>(List<T> toTest)
{
    return toTest?.Any() ?? false;
}
private static bool HasEntries(列表测试)
{
返回toTest?Any()?false;
}

您的泛型类型约束错误

其中T:List
表示:
T
必须是
T
列表。但事实上,你的
T
是某件事的
列表,而不是
T

这里有一个更好的解决方案:

bool HasEntries<T>(T toTest) where T : IList
{
  return toTest?.Count > 0;
}
bool HasEntries(T toTest),其中T:IList
{
返回测试?计数>0;
}

它甚至更快,因为它直接使用
Count
属性,而不使用LINQ。

其他答案是正确的,但是如果您想让它更有用,可以编写如下扩展方法:

public static class IEnumerableExtensions
{
    public static bool IsNullOrEmpty<T>(this IEnumerable<T> sequence)
    {
        return !(sequence?.Any() ?? false);
    }
}
你会写:

if (!weeWoo.IsNullOrEmpty())

我假设这是一个输入错误-我猜你的意思是
私有静态bool haseentries(List toTest){…}
。我相信您可以理解为什么
T:List
(T必须可分配给List)可能会造成问题。是否因为某种原因
T
必须是类?如果OP想要一个
int
列表怎么办?不需要,但OP说他的t实际上是一个POCO。所以我把它作为一个类,OP并没有告诉我们什么是
FooBarModel
。也许它是一个
struct
@Azhar如果您删除该条件,它将适用于引用和值类型的列表。T的限制已删除。
if (PricingPublicationController.HasEntries(weeWoo))
if (!weeWoo.IsNullOrEmpty())