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

C# 如何在一个列表中加入两个类?,c#,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; } }

我有这样的情况:

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; }
}
列表跟踪;
私人课程详情
{
公共字符串日期{get;set;}
公共字符串类型{get;set;}
公共字符串mex{get;set;}
}
私有类上下文
{
公共列表上下文{get;set;}
}

如何在
跟踪
列表中插入类
详细信息
上下文
?我的目标是创建一个多维列表,其中包含类属性作为键,例如:
date、type、mex、context
,以及作为动态内容的值

为此,您可以在两个类之间使用抽象契约。。。 例如,如果两个类都实现了一个新的接口,比如您定义的MyCustomInterface,那么将列表声明为
list trace然后您可以添加这两个类的对象

例子: 您可以使用
Tuple
来保存列表中任一项的实例,但在迭代项时,您必须使用
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) { ... }
并使用它

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) { ... }
列表跟踪;
//加
trace.Add(新的ContextDetails()
{
详细信息=新的详细信息(),
Context=新上下文(),
});
//迭代
foreach(跟踪中的变量项)
if(item.Details?.date==…&&item.Context?.Context!=null){…}

嗯,如果你真的想把两者都列在一个列表中,我会给你两个选择:

第一: 创建一个同时继承的父类。 下一步是将父类的名称放入列表中。 如果它们由相同的父类扩展,则两者都将适用

第二:
创建一个包含上下文和详细信息对象的对象,并将其放入列表。

除非它们实现相同的基类/接口,否则这是一个可怕的想法。如果有人迭代您的列表试图访问
详细信息
对象的
上下文
属性,会发生什么情况?您需要提供更多信息。在这一点上,我想说您应该创建一个聚合类,该类包含
详细信息
上下文
的实例,但是如果不更好地理解您要做的事情,我就不能肯定这一点。我想您需要解释一下多维列表的含义,因为多维度的概念与固有的平面列表不匹配。为什么不创建一个封装详细信息和上下文的类呢?
List
?因为这两个类之间没有共同点,所以我看不到使用接口的好处。为什么不使用
对象
?似乎是一个很好的解决办法,但在这一点上,我知道我是否可以在不创建界面的情况下实现相同的目标,可能是使用另一个对象,不同于列表?此答案缺少如何访问此类列表项的示例(以演示设计问题)。如果OP考虑将两个类放在同一个列表中,那么它们肯定有一些共同点,可以在设计中采用更高的抽象级别…@ΦXoce웃Пepeúpa,普通?只是它们共享相同的父类-
对象
。如果它们有任何共同之处,这将是一个很好的可扩展设计。至于现在,
List
将是一个更好的主意,因为您不需要定义空的
IMyCustomInterface
。元组很少是最好的方法。“考虑到Item1…ItemN的语义,它们很难使用。”我注意到DarrenYoung。
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) { ... }
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) { ... }