1

我有一个 IQueryProvider 的实现,并有以下方法:

public override IQueryable<T> CreateQuery<T>(System.Linq.Expressions.Expression expression)
    {
        return new System.Linq.EnumerableQuery<T>(this.Items);
    }

items 属性定义为

public IEnumerable<T> Items { get; set; }

对于 EnumerableQuery 构造函数,我得到一个神秘的编译器错误:

> Argument 1: cannot convert from
> 'System.Collections.Generic.IEnumerable<T>
> [c:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll]' to
> 'System.Collections.Generic.IEnumerable<T>> [c:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll]'

我究竟做错了什么?我知道它很可能被包含在某个地方的泛型中,但论点对我来说是一样的!

4

1 回答 1

2

问题是您的方法声明:

public override IQueryable<T> CreateQuery<T>(Expression expression)

您在泛型方法中声明了一个的类型参数T。这与 type 的类型T参数不同。将其更改为非泛型方法:

public override IQueryable<T> CreateQuery(Expression expression)

using(顺便说一句,如果您使用适当的指令来避免在代码中包含如此多的完全限定类型名称,您的代码将更容易使用。)

于 2012-11-28T16:46:08.983 回答