各种类型的集合

| 在当前系统上,我需要具有一些修正功能。 就是说,用户可以创建一个补充包,并且该包包含各种域对象的新版本(不是结构更改而是数据更改)。 我想要一个\“ AmmendmentPackage \”,其中包含要对各种不同类型的元素进行的所有修改。 到目前为止,我有
 public class AmmendmentPackage : BaseObject
 {
    public string Name {get;set;}

    public string Description { get; set; }

    public int MajorVersionNumber { get; set; }

    public int MinorVersionNumber { get; set; }

    public bool IsGazetted { get; set; }

    public AmmendmentPackageState State { get; set; }
}

public class Ammendment<T>
{
    public T AmmendedElement{get;set;}

    public AmmendmentState State {get;set;}

    public ConcurrencyDetails ConcurrencyState { get; set; }
}
如何使AmmendmentPackage包含许多不同类型的不同Ammentment。我当时在考虑使用ICollection,但是那时我会得到一个ѭ1,并且包装中只能有一种类型的补偿。 也正在考虑使用字典,但不是100%地确定我现在将如何工作,希望我没有错过任何真正基本的东西,但会喜欢一些想法。 干杯     
已邀请:
这是不可能的。 您不能拥有包含不同类型对象的强类型集合。 相反,您应该制作一个非通用的基类或接口,并对其进行收集。     
您可以创建实现同一接口的不同具体类型的集合。如果您将接口定义设为空,那么它甚至可以应用于任何引用类型而无需修改该类型(但是您必须在运行时确定on2ѭ上可用的操作-我不建议这样做,这是可能的)。例如:
using System;
using System.Collections.Generic;

public interface IAnyType { }
public abstract class PackageBase { }
public class Class_1 : IAnyType { public string Class_1_String { get; set; } }
public class Class_2 : IAnyType { public string Class_2_String { get; set; } }

public class AmmendmentPackage : PackageBase
{
    public IList<Ammendment<IAnyType>> Ammendments { get; set; }
}

public class Ammendment<T> where T : IAnyType
{
    public T AmmendedElement { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        Ammendment<IAnyType> ammendment_1 = new Ammendment<IAnyType>();
        ammendment_1.AmmendedElement = new Class_1();

        Ammendment<IAnyType> ammendment_2 = new Ammendment<IAnyType>();
        ammendment_2.AmmendedElement = new Class_2();

        AmmendmentPackage package = new AmmendmentPackage();
        package.Ammendments = new List<Ammendment<IAnyType>>(2);
        package.Ammendments.Add(ammendment_1);
        package.Ammendments.Add(ammendment_2);
    }
}
    

要回复问题请先登录注册