簡體   English   中英

錯誤:'T'必須是具有公共無參數構造函數的非抽象類型才能將其用作參數'T'

[英]Error: 'T' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T'

我正在嘗試實現一個接受泛型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' CIHelpers.TableHelpers.GetMessages<T>(string, int, System.Data.SqlClient.SqlConnection) '

我稱之為的代碼:

      List<T> messages = TableHelpers.GetMessages<T>(query, 1000, sqlconnection);

實現ITable的類(我傳遞的類型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()
    {

    }
}

我究竟做錯了什么?

調用代碼中的T需要具有相同的約束。

否則,有人可以使用沒有構造函數的T調用您的包裝函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM