通用方法问题 - 引用类型T.

Lit*_*ait 3 .net c# servicestack

我有一个方法,我希望传递一个SqlExpression连接字符串来加载给定类型的数据.问题是我似乎无法确定语法.我的想法是能够调用如下static方法:

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

使用以下方式声明的方法SomeClass:

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

但是,我调用该Select方法的方式给了我语法错误:

"错误10'T'必须是具有公共无参数构造函数的非抽象类型,以便在泛型类型或方法中将其用作参数'T'"

我是仿制药的新手(显然).

Ser*_*rvy 11

'T'必须是具有公共无参数构造函数的非抽象类型

因此,您需要确保T具有无参数构造函数.这仅仅意味着应用以下通用约束:

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

您的班级可能已经满足条件,您只需要确保其他人不能传递不可构造的类型.

出错的原因是Select您调用的方法会添加相同的约束.您基本上保持对方法的相同要求.