Как получить список, в котором может храниться класс с другим общим T? ⇐ C#

Место общения программистов C#
Anonymous
Как получить список, в котором может храниться класс с другим общим T?

Сообщение Anonymous »

Я пытаюсь получить список, в котором можно хранить DataColumn, принимающий общий T, но каждый из DataColumn может иметь разный тип.

Код: Выделить всё

 public class DataColumn
{
private string columnName;
private List values;
public readonly Type dataType;

public DataColumn(string columnName, Type dataType)
{
this.columnName = columnName;
this.dataType = dataType;
}

Код: Выделить всё

public class DataTable
{
private List columns;
public bool AddColumn(string name)
{
//DataColumn column = new(name, typeof(T));
DataColumn column = new(name, typeof(T));
columns.Add(column);
length++;
return true;
}
}
Закомментированная строка не работает, хотя я думал, что так и должно быть. Почему объект не может хранить универсальный тип T и что DataColumn отличается от DataColumn. Я не совсем понимаю, почему тип T не может вычислить объект.
Одним из решений, которое я придумал, было создание интерфейса IDataColumn, и в списке будет храниться интерфейс IDataColumn.
р>

Код: Выделить всё

public interface IDataColumn
{
Type GetType();
bool Add(dynamic value);
object GetValue(int index);
}
public class DataColumn : IDataColumn{...}
Хотя это решает проблему, это создает еще одно неудобство для доступа к атрибутам. Я мог бы создать геттеры, но они возвращали бы либо динамические, либо объектные значения, а не тот тип, в котором хранятся значения таблицы, потому что интерфейс этого не знает. Но мне посоветовали избегать их использования, поскольку они могут привести к небезопасным проверкам.
Поэтому я думаю, мой вопрос заключается в том, есть ли лучший способ решить эту проблему и почему это невозможно. хранить DataColumn как DataColumn.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -generic-t

Вернуться в «C#»