错误:& # 39;t # 39;必须是具有公共无参数构造函数的非抽象类型,才能将其用作形参'T'

本文关键字:类型 抽象 抽象类 形参 参数 错误 构造函数 | 更新日期: 2023-09-27 18:10:19

我正在尝试实现一个方法,它接受一个泛型T并返回T的列表

    public static List<T> GetMessages<T>(string query, int count, SqlConnection sqlconnection)
        where T : ITable, new()
    {
        List<T> messages = new List<T>();
        List<T> errorMessages = new List<T>();
        DataSet response = DBUtils.ExecuteQueryScriptWithConnection(query, sqlconnection);
        for (int i = 0; i < response.Tables[0].Rows.Count; ++i)
        {
            T message = new T();
            DataRow row = response.Tables[0].Rows[i];
            message.Id = Convert.ToInt32(row[0]);
            message.CreatedDate = Convert.ToDateTime(row[1]);                
        }
        return messages;
    }

但是当我从另一个方法调用它时,我得到了错误:

'T'必须是具有公共无参数构造函数的非抽象类型,以便将其用作泛型类型或方法' CIHelpers.TableHelpers.GetMessages<T>(string, int, System.Data.SqlClient.SqlConnection) '中的参数'T'

调用的代码
      List<T> messages = TableHelpers.GetMessages<T>(query, 1000, sqlconnection);

实现我传递的itabletype T的类在这里。

public class MessageReceived : ITable
{
    public int Id { get; set; }
    public DateTime CreatedDate { get; set; }
    string query = String.Format(@"select Id, CreatedDate, from MessageReceived where createddate > '2013-04-18 00:00:00.0000000'");
    public MessageReceived()
    {
    }
}

我做错了什么?

错误:& # 39;t # 39;必须是具有公共无参数构造函数的非抽象类型,才能将其用作形参'T'

调用代码中的T需要具有相同的约束。

否则,有人可能会用没有构造函数的T调用你的包装函数。