我想调用类型为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;
}
我缺少什么?
提前致谢。
答案 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
是一种通用类型,这意味着它必须包含类型参数T
:List<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;
}