如何在c#中保存集合中不同类型的对象?

时间:2016-12-15 13:25:21

标签: c# wpf generics interface

我想在同一个集合中保存不同类型的对象,但无法解决问题。

public class SetupStep
{
   public ObservableCollection</*Picture- or ParameterContaienr*/> Containers {get; set;}
}

public class PictureContainer
{
   public ObservableCollection<Picture> Content {get; set;}
}

public class ParameterContainer
{
   public ObservableCollection<Parameter> Content {get; set;}
}

我认为这可以通过接口和泛型来解决,但到目前为止我还没有找到一个可行的解决方案。 最后,容器集合将绑定到WPF中ScatterView的ItemsSource,它应显示具有不同内容的各个容器。

2 个答案:

答案 0 :(得分:4)

让它们实现相同的界面:

public interface IContainer
{
    // common properties
}

public class Picture: IContainer
{
   // prop
}

public class Parameter: IContainer
{
   //prop
}

public class SetupStep
{
   public ObservableCollection<IContainer> Containers {get; set;}
}

此处如何填写您的收藏:

SetupStep step = new SetupStep();
step.Containers = new ObservableCollection<IContainer>();

Parameter p = new Parameter();
Picture pic = new Picture();

step.Containers.Add(p);
step.Containers.Add(pic);

答案 1 :(得分:0)

您也可以使用通用来解决问题

public interface BaseContainer
{
    // common properties
}

public class Picture : BaseContainer
{

}

public class Parameter : BaseContainer
{

}
interface SetupStep<T> where T:BaseContainer
{
    ObservableCollection<T> Containers { get; set; }
}

public class PictureContainer:SetupStep<Picture>
{

    public ObservableCollection<Picture> Containers { get; set; }
}

public class ParameterContainer : SetupStep<Parameter>
{
    public ObservableCollection<Parameter> Containers { get; set; }
}