E.F. Nijboer
T - это тип, и в вашем случае T должен быть определенным классом или структурой, реализующей IComparable. Но важно помнить, что T просто определяет требование во время написания кода, то есть речь идет о классе, а не об экземпляре объекта.
Вызов GetProperties () работает нормально, но у вас нет экземпляра. Итак, какими бы свойствами ни обладал T, от какого объекта вы ожидали бы значений? Для этого вам нужен экземпляр. В своем коде вы назначаете typeof (T) объекту obj, но typeof (T) дает вам тип, а не экземпляр T. GetProperties в следующей строке-это метод типа, а не T. Если вы хотите, чтобы ваш тестовый код работал с экземпляром T, попробуйте выполнить следующее:
public class TableManagerOf<T> where T : IComparable, new()
{
void test()
{
var obj = new T();
m_Properties = typeof(T).GetProperties();
foreach (var item in m_Properties)
{
var value = item.GetValue(obj);
}
}
}
Дополнительная функция new () заключается в том, чтобы убедиться, что T является классом с конструктором по умолчанию, поэтому новый экземпляр может быть создан с помощью непараметрического конструктора new T ().
Удачи вам!