2017-06-06 82 views
1

我有一个对象列表的列表,如List<List<Event>>将对象列表转换为字符串

如何覆盖ToString(),使每个内部列表显示在一行命令提示符中?

public override string ToString(List<List<Event>>) 
{ 
    return ? 
} 
+0

不知道你正在使用的本作,但可能是值得的,以JSON或YAML序列化呢? –

+0

@凯文史密斯:我不这么认为。这些事件只是对应于有限状态机的一些字符串。我需要的是一种打印它们的方法。这个任务的序列化听起来很复杂。 – Roboticist

回答

1
public override string ToString(List<List<Event>> lle) 
{ 
    StringBuilder res=new Stringbuilder(your_guess_of_lenght_here); 
    foreach(List<Event> le in lle){ 
     foreach(Event e in le){ 
      res.Append(e+"any_separator_of_elements"); 
     } 
     res.Append("\n"); 
    } 
    return res.ToString(); 
} 

像这样的事情?我不知道你的事件字符串表示,你可能想改变它。

+0

不妨用'res.AppendLine();''res.Append(“\ n”);'' – Tdorno

+0

或'Environment.NewLine'(实际上由'AppendLine()'粘贴) – Kartoffel

+0

如果我有没有关于'res'变量的值的猜测? – Roboticist

3
public override string ToString(List<List<Event>> events) 
{ 
    return string.Join(", ", 
     events.SelectMany((list) => list) 
      .Select((ev) => ev.ToString())); 
} 
  1. 以列表的列表,并与.SelectMany()
  2. 弄平它转换各自Event为字符串重复使用.ToString()
  3. 字符串数组连接成一个字符串与逗号分隔(可更改)。

编辑1 鉴于基本方法签名string ToString()没有你可能需要引用一个字段或属性类,而不是定义一个单独的string ToString(List<List<Event>> events)任何参数。

public class SO 
{ 

    List<List<Event>> events; 

    public override string ToString() 
    { 
     return string.Join(", ", 
      events.SelectMany((list) => list) 
       .Select((ev) => ev.ToString())); 
    } 
} 
+0

我添加了一个简要的步骤说明。 – ja72

+1

'.ToArray()'似乎没有必要。 – Magnus

+0

你是对的。我在编辑答案。 – ja72

0
public override string ToString(List<List<Event>> listOflistOfEvents) 
    { 
     StringBuilder result = new StringBuilder(); 
     listOflistOfEvents.ForEach(delegate(List<Event> listOfEvents) 
     { 
      result.AppendLine(); 
      listOfEvents.ForEach(events => result.Append(events + ",")); 
     }); 
     return result.ToString(); 
    }