匿名类型和泛型

5

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

// 我想实例化的类

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)的类型参数无法从使用中推断出。请明确指定类型参数。

有没有办法解决这个问题?(我在考虑接口并返回一个接口,但不确定是否可行)是否有人可以帮助传递匿名类型到泛型。


你能提供ArrayStoreGenerator的实现吗?我在谷歌上找不到它,所以我怀疑这是你自己的库。 - Pieter van Ginkel
4个回答

6

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

相反,使用var usersQuery = ...。这将把变量类型定义为IQueryable<TAnon>,与ArrayStoreGenerator.CreateInstance的签名相匹配。


3
您应该将usersQuery定义为var。

2
如果您尝试使用var usersQuery本地变量而不是显式指定其类型,会发生什么?

0

尝试使用ToArray

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接