如何在一个列表中加入两个类?

时间:2016-04-12 14:00:28

标签: c#

我遇到这种情况:

List<Details> trace; 
private class Details
{
    public string date { get; set; }
    public string type { get; set; }
    public string mex { get; set; }
}
private class Context
{
    public List<object> context { get; set; }
}

如何在trace列表中插入课程DetailsContext?我的目标是创建一个多维列表,其中包含类属性的关键字:date, type, mex, context和值作为动态内容。

3 个答案:

答案 0 :(得分:5)

您可以为此目的使用两个类之间的抽象合同...... 例如,如果两个类都实现了一个新接口,让我们说你定义的 MyCustomInterface ,然后将列表声明为List<MyCustomInterface> trace;然后你可以添加这两个类的对象......

实施例

 List<MyCustomInterface> trace; 

    private class Details: MyCustomInterface
    {
        public string date { get; set; }
        public string type { get; set; }
        public string mex { get; set; }
    }

    private class Context:MyCustomInterface
    {
        public List<object> context { get; set; }
    }

然后你可以随时做

trace.Add(new Context(...));
trace.Add(new Details(...));

答案 1 :(得分:2)

您可以使用Tuple<Details, Context>将实例保存为列表中的项目,但是在迭代项目时,您必须使用Item1和此类名称来访问基础值:

List<Tuple<Details, Context>> trace; 

// add
trace.Add(new Tuple(new Details(), new Context()));

// iterate
foreach(var item in trace)
    if(item.Item1?.date == ... && item.Item2?.context != null) { ... }

更好的想法可能是构建自己的类型以同时包含:DetailsContext实例(作为具有相同名称的属性):

class ContextDetails
{
    public Context { get; set; }
    public Details { get; set; }

    // todo: add constructor to simplify constructing items when adding
}

并使用它

List<ContextDetails> trace; 

// add
trace.Add(new ContextDetails()
{
    Details = new Details(),
    Context = new Context(),
});

// iterate
foreach(var item in trace)
    if(item.Details?.date == ... && item.Context?.context != null) { ... }

答案 2 :(得分:0)

嗯,如果你真的想在列表中同时拥有它们,我会给你两个选择:

第一: 创建一个继承的父类。 下一步是将父类的名称放入List中。 如果它们被同一父类

扩展,则两者都适合

第二: 创建一个包含Context和Details对象的Objekt,并将其放入列表中。