Fehler: 'T' muss ein nicht-abstrakter Typ mit einem öffentlichen parameterlosen Konstruktor, um es zu verwenden als parameter 'T'
Ich versuche, eine Methode zu implementieren, die eine generische T und liefert eine Liste von 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;
}
Aber wenn ich es aufrufen einer anderen Methode bekomme ich den Fehler:
'T' muss ein nicht-abstrakter Typ mit einem öffentlichen parameterlosen Konstruktor, um es zu verwenden als parameter " T "in der generischen Typ oder Methode"
CIHelpers.TableHelpers.GetMessages<T>(string, int, System.Data.SqlClient.SqlConnection)
'
Code, der ich bin, ruft diese aus:
List<T> messages = TableHelpers.GetMessages<T>(query, 1000, sqlconnection);
Die Klasse, die ITable (Typ T, ich bin vorbei ist hier.
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()
{
}
}
Was mache ich falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
T
im aufrufenden code haben muss, um den gleichen Einschränkungen.Sonst könnte jemand rufen Sie Ihren wrapping-Funktion mit einem
T
, die nicht über einen Konstruktor verfügen.