Получить список, который может хранить класс с другим общим TC#

Место общения программистов 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 не может быть вычислен как объект< /code>?
Одним из решений является создание интерфейса IDataColumn и его сохранение в списке:

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

public interface IDataColumn
{
Type GetType();
bool Add(dynamic value);
object GetValue(int index);
}

public class DataColumn : IDataColumn{...}
Хотя это решает проблему, это создает еще одно неудобство для доступа к атрибутам. Я мог бы создать геттеры, но они возвращали бы либо динамический, либо объект, а не тип, значения которого хранит таблица, потому что интерфейс этого не знает. Но мне посоветовали избегать их использования, поскольку они могут привести к небезопасным проверкам.
Как мне решить эту проблему?

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

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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