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 回答