如何使用c#中的泛型类对象返回泛型列表?

问题描述 投票:0回答:2

我想返回带有类对象的表列表,并且此调用也很通用,我不想在任何其他类型上使用任何非强类型列表,例如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;
        }

在上述Method,Table1,Table2和任何类型的表类对象中...没有任何类,这些类用于自定义格式的表属性的设置。

我想退货。

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

谢谢。

c# generics return generic-list generic-collections
2个回答
0
投票

您必须在未显式指定类型参数的情况下将通用类型与列表一起使用。另外,您可以创建一个基类或接口,将其作为List的参数。

我的意思是:

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

0
投票

如果列表组件的唯一共同之处是它们是Table<>通用对象,如果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
        {           
        }
© www.soinside.com 2019 - 2024. All rights reserved.