将数组或列表数据转换为字符串 => 变得轻松简单! (C#, MVC3, LINQ)
一种简短的一行代码,通过 LINQ 将任何数据类型的数组或列表转换为自定义字符串
你是否曾经需要将一个
Array
或任何类型的列表转换为一个 string
,其中包含一些值,然后用逗号(“,”)分隔?我想大多数开发者都遇到过这种情况。为了做到这一点,你可以使用 For
或 Foreach
循环,这可能显得笨拙且占用多行代码,特别是当你只需要列出一些名称时,例如“Name1, Name2, ... NameN”。更好的、更简洁的方法是使用 LINQ 语句在 C# 中实现。我将在下面展示一个例子,最后我会展示更简单、更简洁的方法!假设我们有一个城市名称列表@{
var cities = new[] {
new {Name = "Monroe", Id = 1},
new {Name = "Moscow", Id = 2},
new {Name = "New Orleans", Id = 3},
new {Name = "Ottawa", Id = 4},
new {Name = "Mumbai", Id = 5},
new {Name = "Rome", Id = 6},
new {Name = "Rio", Id = 7}
};
}
因此,要通过 LINQ 将其转换为 string
类型的名称,你可以这样做@cities.Aggregate("", (a, b) => a + b.Name + ", ")
这将返回:“Monroe, Moscow, New Orleans, Ottawa, Mumbai, Rome, Rio,”。这正是我们需要的... 或者真的是这样吗?你注意到 Rio 后面那个丑陋的逗号(“,”)了吗?你是不是很讨厌它,哈?所以,为了删除它,你可能需要做一些类似的事情@{
var cities_string = sourceData.Aggregate("", (a, b) => a + b.Name + ", ");
cities_string = cities_string.Remove(cities_string.LastIndexOf(","));
}
@cities_string
这会有效,但我们承认对于这样一个简单的操作来说,它有点笨拙。但是,好消息是!你可以用一行代码完成它,我称之为“优雅的方式”(注意:要做到这一点,你需要 PGK.Extensions[^] 扩展库包)@cities.Select(x => x.Name).ToList().Join(", ")
或者,如果你不想安装任何扩展,你可以使用 .NET 4.0 内置的 string
扩展(由 Namlak[^] & wgross[^] 建议,感谢!)@string.Join(", ", cities.Select(c => c.Name))
两种方法都返回:“Monroe, Moscow, New Orleans, Ottawa, Mumbai, Rome, Rio”。就这样!不再需要删除那个丑陋的逗号了!顺便说一句,如果你必须使用 .NET 3.5,那么你将不得不通过 Richard[^] 建议的 .Aggregate
扩展方法来做,如 Alternative 3[^] 中所示。