我有一个方法,我希望传递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'”
我是仿制药的新手(显然)。
答案 0 :(得分:11)
'T'必须是具有公共无参数构造函数的非抽象类型
因此,您需要确保T
具有无参数构造函数。这只是意味着应用以下通用约束:
public static List<T> Query<T>(SqlExpressionVisitor<T> ev, string connectionString)
where T : new()
{ ... }
你的班级可能已经满足条件,你只需要确保别人不能传递不可构造的类型。
错误的原因是您正在调用的Select
方法添加了这些相同的约束。您基本上对方法保持相同的要求。