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

时间:2012-10-16 15:04:52

标签: c# .net servicestack

我有一个方法,我希望传递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'”

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

1 个答案:

答案 0 :(得分:11)

  

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

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

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

你的班级可能已经满足条件,你只需要确保别人不能传递不可构造的类型。

错误的原因是您正在调用的Select方法添加了这些相同的约束。您基本上对方法保持相同的要求。