从列表中的多个泛型类型中检索值[这是否可能]

时间:2017-07-26 12:35:37

标签: c# generics

考虑这种情况。

    public abstract class DocumentBase
    {
        public int Index { get; set; }
    }

    public class Document<T> : DocumentBase where T : class
    {
        //Items which are to be inserted into a table on the document
        private List<T> TableItems;

        public Document(int index, List<T> tableItems)
        {
            Index = index;
            TableItems = tableItems; 
        }
    }

然后我创建了一个DocumentBase列表,但是在列表中填入了“Document”类型,每个项目的泛型都不同。

        var documents = new List<DocumentBase>();

        var documentContentsType1 = new List<DocumentContentType1> { new DocumentContentType1("docInfo1") };
        var documentContentsType2 = new List<DocumentContentType2> { new DocumentContentType2("docInfo2") };

        var documentType1 = new Document<DocumentContentType1>(1, documentContentsType1);
        var documentType2 = new Document<DocumentContentType2>(2, documentContentsType2);

        documents.Add(documentType1);
        documents.Add(documentType2);

所以我在文档库列表中添加了两种不同的文档类型。

我现在想要访问每个列表的Document类的属性。例如,documents[0].TableItems

就像这样

我只能从DocumentsBase访问属性,这是可以理解的。

我可以在设置中更改哪些内容来解决此问题?

2 个答案:

答案 0 :(得分:2)

你可以在DocumentBase中声明抽象方法,然后在子类中覆盖它,这样它就会返回一些关于对象的信息(它会是一种getter)。我无法想到任何其他方式。

答案 1 :(得分:0)

有些人可能会添加一个继承自DocumentBase但不属于Document类的类的对象。

你能做的是:

documents.OfType<Document<DocumentBaseType>>().ToList()[0].TableItems

public abstract class DocumentBaseType{}

使您的DocumentType1和DocumentType2扩展DocumentBaseType