将List <>中的项目转换为连接和格式化的字符串?

tbo*_*one 1 .net c#

鉴于:

    protected class Marker { 
        public string Name { get; set; }
        public string Lat { get; set; }
        public string Long { get; set; } 
    };

List<Marker> allMarkers = new List<Marker>();
allMarkers.Add(new Marker{Name="Bondi Beach", Lat = "-33.890542", Long = "151.274856"});
allMarkers.Add(new Marker{Name="Coogee Beach", Lat = "-33.923036", Long = "151.259052"});
allMarkers.Add(new Marker{Name="Cronulla Beach", Lat = "-34.028249", Long = "151.157507"});
allMarkers.Add(new Marker{Name="Manly Beach", Lat = "-33.800101", Long = "151.287478"});
allMarkers.Add(new Marker{Name="Maroubra Beach", Lat = "-33.950198", Long = "151.259302"});
Run Code Online (Sandbox Code Playgroud)

我想转换为这种格式的字符串:

['Bondi Beach', -33.890542, 151.274856],
['Coogee Beach', -33.923036, 151.259052],
['Cronulla Beach', -34.028249, 151.157507],
['Manly Beach', -33.800101, 151.287478],
['Maroubra Beach', -33.950198, 151.259302]
Run Code Online (Sandbox Code Playgroud)

是否有一种单行方式来执行此操作,类似于string.Join(),或者我是否必须通过List上的foreach手动执行并使用stringbuilder.appendformat()?

drh*_*ris 7

如果Marker是您自己的类,请考虑重写ToString()方法以按照您的方式显示每一行.然后,您可以使用简单的String.Join()方法将它们组合在一起.

protected class Marker
{
    public string Name { get; set; }
    public string Lat { get; set; }
    public string Long { get; set; }
    public override string ToString()
    {
        return String.Format("['{0}', {1}, {2}]", Name, Lat, Long);
    }
};
Run Code Online (Sandbox Code Playgroud)

然后,使用:

List<Marker> allMarkers = new List<Marker>();
allMarkers.Add(new Marker { Name = "Bondi Beach", Lat = "-33.890542", Long = "151.274856" });
allMarkers.Add(new Marker { Name = "Coogee Beach", Lat = "-33.923036", Long = "151.259052" });
allMarkers.Add(new Marker { Name = "Cronulla Beach", Lat = "-34.028249", Long = "151.157507" });
allMarkers.Add(new Marker { Name = "Manly Beach", Lat = "-33.800101", Long = "151.287478" });
allMarkers.Add(new Marker { Name = "Maroubra Beach", Lat = "-33.950198", Long = "151.259302" });
Console.Write(String.Join(",\n", allMarkers));
Run Code Online (Sandbox Code Playgroud)

注意:如果您正在处理大量标记并注意到性能不佳,请考虑将该String.Format()行重写为:

return "['" + Name + "', " + Lat.ToString() + ", " + Long.ToString() + "]";
Run Code Online (Sandbox Code Playgroud)

根据您的使用情况,您可能会注意到这更好(或更糟).