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)

ジェネリック メソッドで新しい型パラメーターを宣言しています。これは、 type の型パラメーターTと同じではありません。非ジェネリック メソッドに変更します。T

public override IQueryable<T> CreateQuery(Expression expression)

(余談ですが、適切なusingディレクティブを使用して、コードに非常に多くの完全修飾型名を含めないようにすると、コードが使いやすくなります。)

于 2012-11-28T16:46:08.983 に答える