Как вернуть Generi c List с Generi c Class Object в c#? - PullRequest
0 голосов
/ 08 мая 2020

Я хочу вернуть список таблиц с существующим объектом класса, и этот вызов также является generi c, я не хочу использовать какой-либо список несильного типа, например ArrayList, на любом другом.

        public List<T> GetTables()
        {
            var tbls = new List<T>();
            tbls.Add(new Table<Table1>() { Name = "Table1"});
            tbls.Add(new Table<Table2>() { Name = "Table2"});
            tbls.Add(new Table<Table3>() { Name = "Table3"});
            return tbls;
        }

в приведенном выше методе, Table1, Table2 и любом объекте класса таблицы типа ... У классов нет никакого базового класса, эти классы используются для набора свойств таблицы с настраиваемым форматом.

Хочу вернуть.

Пожалуйста, помогите мне, если у кого-нибудь есть идеи.

спасибо.

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

Если единственная общая черта компонентов списка - это Table<> generi c объекты, если между Table1 / Table2 / Table2 нет интерфейса или общего базового класса, вы можно просто рассматривать их как object:

        public List<Table<IGenerateData>> GetTables()
        {
            var tbls = new List<Table<IGenerateData>>();
            tbls.Add(new Table<Table1>() { Name = "Table1"});
            tbls.Add(new Table<Table2>() { Name = "Table2"});
            tbls.Add(new Table<Table3>() { Name = "Table3"});
            return tbls;
        }

        public interface IGenerateData
        {
            void GenerateData();
        }

        public class Table1 : IGenerateData
        {           
        }
1 голос
/ 08 мая 2020

Вы не можете использовать общий тип c со списком без явного указания параметра типа. В качестве альтернативы вы можете создать базовый класс или интерфейс, который будет параметром для списка.

Я имею в виду:

        public static List<ITable> GetTables()
        {
            var tbls = new List<ITable>();
            tbls.Add(new Table<Table1> { Name = "Table1"});
            tbls.Add(new Table<Table2> { Name = "Table2"});
            tbls.Add(new Table<Table3> { Name = "Table3"});
            return tbls;
        }

        public class Table<T> : ITable
        {
            public T TableInstance { get; set; }
            public Type TableType => typeof(T);
            public string Name { get; set; }
        }

        public interface ITable
        {
            Type TableType { get; }
            public string Name { get; set; }
        }
...