3

SqlExpression特定のタイプのデータをロードするために、接続文字列を渡したいメソッドがあります。問題は、構文を特定できないように見えることです。static私の考えは、次のようなメソッドを呼び出せるようにすることです。

OrmLiteConfig.DialectProvider = ServiceStack.OrmLite.MySqlDialect.Provider;
SqlExpressionVisitor<SampleItem> ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<SampleItem>();
var result = SomeClass.Query<SampleItem>(ev, connectionString);

次のように宣言されたメソッドを使用しSomeClassます。

public static List<T> Query<T>(SqlExpressionVisitor<T> ev, string connectionString)
{
    IDbConnection conn = connectionString.OpenDbConnection();
    var result = conn.Select<T>(ev);
    return result;
}

ただし、メソッドを呼び出すSelect方法では、構文エラーが発生します。

「エラー10'T'は、ジェネリック型またはメソッドでパラメーター' T'として使用するために、パブリックパラメーターなしのコンストラクターを持つ非抽象型である必要があります。」

私はジェネリックスに不慣れです(明らかに)。

4

1 に答える 1

11

'T'は、パブリックパラメーターレスコンストラクターを持つ非抽象型である必要があります

Tしたがって、パラメーターのないコンストラクターがあることを確認する必要があります。これは単に、次の一般的な制約を適用することを意味します。

public static List<T> Query<T>(SqlExpressionVisitor<T> ev, string connectionString)
  where T : new()
{ ... }

あなたのクラスはすでに条件を満たしている可能性があります。他の誰かが構築不可能なタイプを渡さないようにする必要があります。

エラーの理由は、Select呼び出しているメソッドがこれらの同じ制約を追加するためです。基本的に、メソッドに対して同じ要件を維持しています。

于 2012-10-16T15:07:54.483 に答える