匿名类型和泛型

时间:2010-10-25 15:59:21

标签: c#

我找不到将匿名类型作为类型参数传递给泛型类的方法。

//这是我要实例化的类

public class ExtArrayStore<T> : IViewComponent 
{
    public IQueryable<T> Data { get; set; }

... //创建者类

public static class ArrayStoreGenerator
{
    public static ExtArrayStore<T> CreateInstance<T>(IQueryable<T> query)
    {
        return new ExtArrayStore<T>();
    }
}

//尝试使用此

IQueryable usersQuery= ((from k in bo.usersselect new { userid = k.userid, k.username}).AsQueryable());
      var x = ArrayStoreGenerator.CreateInstance(usersQuery);

我到了;

无法从用法中推断出方法 ArrayStoreGenerator.CreateInstance(System.Linq.IQueryable)'的类型参数。尝试明确指定类型参数

有没有办法实现这个目标? (我正在考虑接口并返回一个接口,但不确定它是否可行)可以帮助将anon类型传递给泛型。

4 个答案:

答案 0 :(得分:6)

usersQuery被输入为非泛型IQueryable,因为您在变量的声明中明确指定了它。

相反,请var usersQuery = ...。这会将变量键入IQueryable<TAnon>,然后匹配ArrayStoreGenerator.CreateInstance的签名。

答案 1 :(得分:3)

您应该将usersQuery定义为var。

答案 2 :(得分:2)

如果您尝试使用var usersQuery局部变量而不是明确指定其类型,该怎么办?

答案 3 :(得分:0)

尝试ToArray

var x = ArrayStoreGenerator.CreateInstance(usersQuery.ToArray());