如何调用List类型的方法

本文关键字:List 类型 方法 调用 何调用 | 更新日期: 2023-09-27 18:17:40

目标

我想调用一个类型为List的方法。我正在使用c#。. NET + MVC 4.

我是初学者,我不明白下面的错误:

错误 1使用泛型类型"System.Collections.Generic"。List'需要1个类型参数

我有什么

    public ActionResult Index()
    {
        return Content(getProductsList(0, 14));
    }
    public virtual List getProductsList(int isOffer, int categoryId)
    {
        List data = ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery("CALL getProductsListForHome({0}, {1});", isOffer, categoryId).ToList();
        return data;
    }

我错过了什么?

如何调用List类型的方法

List<T>是一个泛型,这意味着它的实现采用"通配符"类型T,当创建该类型的对象时,该类型T被您想要保留在列表中的任何内容所替换。

对于列表,这意味着您在列表中存储具有相同类型的对象,并且当从列表中检索元素时,它们仍然具有该类型。

有效声明列表的示例如下:

List<string> listOfStrings = new List<string>();
List<int> listOfInts = new List<int>();

在您的情况下,您正在使用ObjectContext.ExecuteStoreQuery<TElement>,这是一个接受类型参数本身的泛型方法。该类型参数的选择决定了List<>应该是哪种类型。您还没有为方法调用指定类型,所以如果您修复了列表声明,这可能是您得到的下一个错误。

理想情况下,它应该是这样的:

List<Product> data = ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<Product>("CALL getProductsListForHome({0}, {1});", isOffer, categoryId).ToList();

顺便说一句。我不确定,但我认为你用错了ExecuteStoreQuery。首先,参数占位符很可能不是字符串格式占位符,而是SQL占位符(@1@2);其次,该方法似乎只想要存储的查询的名称。所以你可以这样命名它:

ExecuteStoreQuery<Product>("getProductsListForHome", isOffer, categoryId).ToList();

List是泛型类型,这意味着它必须包含类型参数T: List<T>,例如List<int>List<YourClass>

您需要一个List的数据类型,如下所示:

public virtual List<Product> getProductsList(int isOffer, int categoryId)
{
    List<Product> data = ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery("CALL getProductsListForHome({0}, {1});", isOffer, categoryId).ToList();
    return data;
}