如何在 C# 中使用通用 Class 对象 return 通用列表?

How to return Generic List with Generic Class Object in c#?

我想 return Table 列出 class 对象并且这个调用也是通用的,我不想在任何对象上使用像 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,以及任何类型的table class对象...classes没有任何基于 class,这些 class 使用自定义格式设置 table 属性。

我要return它。

如果有人有任何想法,请帮助我。

谢谢。

如果不明确指定类型参数,则不能将泛型类型与列表一起使用。或者,您可以创建一个基础 class 或接口作为列表的参数。

我的意思是:

        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; }
        }

如果列表组件的唯一共同点是它们是 Table<> 通用对象,如果 Table1/[= 之间没有任何接口或公共基础 class 13=]/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
        {           
        }