Reputation:
I've a list of list of objects like List<List<Event>>
.
How can I override ToString()
such that each internal list will be shown in a single line of command prompt?
public override string ToString(List<List<Event>>)
{
return ?
}
Upvotes: 1
Views: 166
Reputation: 29254
public override string ToString(List<List<Event>> events)
{
return string.Join(", ",
events.SelectMany((list) => list)
.Select((ev) => ev.ToString()));
}
.SelectMany()
Event
to a string re-using .ToString()
Edit 1
Given that the base method signature is string ToString()
without any parameters you probably need to reference a field or property in your class and not define a separate 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()));
}
}
Upvotes: 2
Reputation: 729
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();
}
Upvotes: 0
Reputation:
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();
}
Something like this? I don't know your event string representation, you may want to change that.
Upvotes: 0