首页 > 解决方案 > 使用泛型函数测试模型列表是否有任何条目或为空的问题

问题描述

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

该类型List<FooBarModel>不能用作泛型类型或方法中的类型参数“T” HasEntries<T>(T)。没有从List<FooBarModel>到的隐式引用转换List<List<FooBarModel>>...

我不太确定如何适当地编写通用函数......

我的功能如下:

    private static bool HasEntries<T>(T toTest) where T : List<T>
    {
        return toTest?.Any() ?? false;
    }

我通过执行以下操作来调用它:

if (PricingPublicationController.HasEntries(weeWoo))
{
    // code code code
}

weeWoo 的类型在哪里:

List<FooBarModel>();

编辑:澄清一下, FooBarModel 和其他代替 T 的东西通常是 MVC 的类模型

标签: c#generics

解决方案


您的泛型类型约束是错误的。

where T : List<T>意思是:T必须是一个ListT但实际上你T是一个Listof的东西,而不是of的T

这是一个更好的解决方案:

bool HasEntries<T>(T toTest) where T : IList
{
  return toTest?.Count > 0;
}

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


推荐阅读