我遇到这种情况:
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
列表中插入课程Details
和Context
?我的目标是创建一个多维列表,其中包含类属性的关键字:date, type, mex, context
和值作为动态内容。
答案 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) { ... }
更好的想法可能是构建自己的类型以同时包含:Details
和Context
实例(作为具有相同名称的属性):
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,并将其放入列表中。