C# 对列表中的多个项目使用String.Join

C# 对列表中的多个项目使用String.Join,c#,string,linq,C#,String,Linq,我有这样一个实体: public class Task { public string TaskID { get; set; } public string Description { get; set; } public string IsComplete { get; set; } } var delimString = String.Join(",", tasks.Select(t => t.ToDelimitedString())); 我有一系列任务,如

我有这样一个实体:

public class Task
{
    public string TaskID { get; set; }
    public string Description { get; set; }
    public string IsComplete { get; set; }
}
var delimString = String.Join(",", tasks.Select(t => t.ToDelimitedString()));
我有一系列任务,如:

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" });
…如何进一步选择和分隔其他字段?

如下所示:

string delimitedString = 
           string.Join(",", tasks.Select(
                                  l => string.Format("{0}#{1}", l.TaskID, l.IsComplete)));
如果您使用的是C-6:

string delimitedString = 
            string.Join(",", tasks.Select(
                                   l => $"{l.TaskID}#{l.IsComplete}"));
您可以这样做,但我更愿意在Task中实现一个新的方法,您可以调用它——只是为了让它更易于阅读

public class Task
{
    ...
    public String ToDelimitedString()
    {
        return String.Format("{0}#{1}", TaskId, IsComplete);
    }
}
然后这样称呼它:

public class Task
{
    public string TaskID { get; set; }
    public string Description { get; set; }
    public string IsComplete { get; set; }
}
var delimString = String.Join(",", tasks.Select(t => t.ToDelimitedString()));
这样,您就可以将格式放在一个地方,并且可以从任何地方调用它,而不会出现不一致的情况


顺便说一句:我还尝试为类找到一个不同的名称,以避免任何可能的混淆。

我认为您需要的是为任务实现一个ToString,因此它会显示您想要的内容

如果不能,则不是您的代码,请实现一个单独的函数:

private string StringifyTask(Task task)
{
    return string.Format("{0}#{1}", task.TaskId, task.IsComplete);
}

然后使用StringifyTask作为Select的参数。另外-请注意,在Linq声明之前,您实际上不需要ToList。

谢谢,效果很好。顺便说一句,你遗漏了一个结束括号