Я пытаюсь вызвать универсальную функцию из другого потока, но по какой-то причине мой универсальный параметр T, похоже, не распознается изнутри задачи. Моя общая функция выглядит так
private T extractSingleItem<T>(NpgsqlDataReader dr) where T : new()
{
T c = new T();
if (dr.Read())
{
foreach (PropertyInfo p in typeof(T).GetProperties(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Instance))
{
try
{
//extracting the column name for the property's attributes
string column = ((TableAttribute)p.GetCustomAttribute(typeof(TableAttribute))).Column;
c.GetType().GetProperty(p.Name).SetValue(c, dr[column]);
}
catch
{
}
}
}
return c;
}
и я пытаюсь назвать это так
public override void execQuery<T>(string query, Dictionary<string, dynamic> qparams, EventHandler<dynamic> callBack)
{
Task.Run(() => {
string db = mConnection.Database;
if (mConnection.State == ConnectionState.Closed)
mConnection.Open();
NpgsqlCommand command = new NpgsqlCommand(query, mConnection);
command.Parameters.AddRange(qparams.Select(x => new NpgsqlParameter(x.Key, x.Value)).ToArray());
NpgsqlDataReader dr = null;
try
{
dr = command.ExecuteReader();
}
catch
{
command.Connection = genNewConn();
dr = command.ExecuteReader();
}
var res = extractSingleItem<T>(dr);
});
}
но у кого то я получаю эту ошибку
"Код серьезности Описание Состояние подавления строки файла проекта
Ошибка CS0310 «T» должна быть неабстрактного типа с открытым конструктором без параметров, чтобы использовать его в качестве параметра «T» в универсальном типе или методе «
только когда я звоню изнутри задачи.