在我正在研究的当前系统中,我需要具备修改功能。
那就是用户可以创建修订包,并且该包包含各种域对象的新版本(不是结构更改只是数据更改)。
我希望有一个“修改包”,其中包含对各种不同类型元素所做的所有修正。
到目前为止我已经
了 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,但后来我会有一个ICollection<Ammenndment<T>>
,我只能在包装中有一种类型的修正。
还在考虑使用字典,但不是100%肯定我会如何工作,希望我没有错过一些非常基本的东西,但会欣赏一些想法。
干杯
答案 0 :(得分:2)
这是不可能的。
您不能拥有包含不同类型对象的强类型集合。
相反,您应该创建一个非泛型的基类或接口,并创建它们的集合。
答案 1 :(得分:0)
您可以创建实现相同界面的不同具体类型的集合。如果将接口定义设置为空,那么它甚至可以应用于任何引用类型而无需修改该类型(但是您必须在运行时确定AmmendedElement
上可用的操作 - 我不要&# 39;推荐这个,这是可能的)。例如:
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);
}
}