如何调用List类型的方法

时间:2013-06-10 16:38:03

标签: c# asp.net-mvc-4

目标

我想调用类型为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;
    }

我缺少什么?

提前致谢。

3 个答案:

答案 0 :(得分:2)

List<T>generic type,表示其实现采用“通配符”类型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();

答案 1 :(得分:1)

List是一种通用类型,这意味着它必须包含类型参数TList<T>,例如List<int>List<YourClass>

答案 2 :(得分:0)

您需要一个类似于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;
}