将String.Join用于List中的多个项目

use*_*119 2 c# linq string

我有这样一个实体:

public class Task
{
    public string TaskID { get; set; }
    public string Description { get; set; }
    public string IsComplete { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有一系列任务,如:

List<Task> tasks = new List<Task>();
tasks.Add(new Task() { TaskID = "1", Description = "A", IsComplete = "Yes" });
tasks.Add(new Task() { TaskID = "2", Description = "B", IsComplete = "No" });
Run Code Online (Sandbox Code Playgroud)

我试图string从这个集合中划分以下内容:

1#Yes,2#No

我设法得到了:

string delimitedString = String.Join(",", tasks.ToList().Select(l => l.TaskID));
Run Code Online (Sandbox Code Playgroud)

...如何进一步选择和分离其他字段?

Yuv*_*kov 12

像这样:

string delimitedString = 
           string.Join(",", tasks.Select(
                                  l => string.Format("{0}#{1}", l.TaskID, l.IsComplete)));
Run Code Online (Sandbox Code Playgroud)

如果您使用的是C#-6:

string delimitedString = 
            string.Join(",", tasks.Select(
                                   l => $"{l.TaskID}#{l.IsComplete}"));
Run Code Online (Sandbox Code Playgroud)


ger*_*rmi 5

你可以像Yuval Itzchakov提出的那样去做,但我宁愿实现一种新的方法Task,你可以调用 - 只是为了让它更容易阅读.

public class Task
{
    ...
    public String ToDelimitedString()
    {
        return String.Format("{0}#{1}", TaskId, IsComplete);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后像这样调用它:

var delimString = String.Join(",", tasks.Select(t => t.ToDelimitedString()));
Run Code Online (Sandbox Code Playgroud)

这样您就可以将格式放在一个位置,并且可以从任何地方调用它而不会出现不一致.

顺便说一下:我还会尝试为类找到一个不同的名称,以避免与System.Threading.Tasks.Task混淆.