[转载]关于string.Join()的妙用与疑惑

[转载]关于string.Join()的妙用与疑惑 – 我是你的猪 – 博客园.

String.Join  在指定 String 数组的每个元素之间串联指定的分隔符 String,从而产生单个串联的字符串。(来源于MSDN)

假设我有一分类表cat,包含id,name列

内容如下:

//id  name
//1    随笔
//2    文章
//3    新闻

如果想得到”随笔,文章,新闻“的结果,我会这么写(假设已经取得List<cat>):

StringBuilder sb = new StringBuilder();
int i = 0;
foreach (var item in cat)
{
sb.Append(cat.Name);
if (cat.Count != i)
{
sb.Append(
,);
}
i
++;
}
return sb.ToString();

或者这种(需保证cat.Count>0):

StringBuilder sb = new StringBuilder();
foreach (var item in cat)
{
sb.Append(
,);
sb.Append(cat.Name);
i
++;
}
return sb.ToString().Substring(1);

但是当有了string.Join之后,一切简单多了:

return string.Join(,, cat.Select(p=>p.Name).ToList());

PS.如果是List<string>的话,可以直接省略后面的.Select(p=>p.Name).ToList(),因为是实体List<cat>,所以需要指定需要遍历的列

这确实很方便,以前要5,6行的代码,现在一行就解决了.

于是我将这种方法大量使用在了我的MVC网站中,先看下最终效果:

首先,我跟上面一样,想循环得到一个分类列表:

string.Join(,, Model.Cats.Select(item => item.Name).ToList())

但是,这是在MVC的Razor页面,所以,我想生成的是带超链接的文字,那么应该这样做:

string.Join(,, Model.Tags.Select(item => Html.ActionLink(item.Name, Index, Article, new { t = item.Name }, new { title = string.Format(查看 {0} 的全部文章, item.Name) })).ToList())

但是发现运行之后变成了这样:

原来Html被转移了,看来需要使用下Html.Raw()方法,于是:

Html.Raw(string.Join(,, Model.Tags.Select(item => Html.ActionLink(item.Name, Index, Article, new { t = item.Name }, new { title = string.Format(查看 {0} 的全部文章, item.Name) })).ToList()))

最终,我们得到了一个超长的方法.

这是原来的方法:

@{int i = 0;}
@foreach (var item
in Model.Categorys)
{
@Html.ActionLink(item.Name,
Index, Article , new { c = item.Url }, new { title =string.Format( 查看 {0} 的全部文章,item.Name) })
@(
++i == Model.Categorys.Count ? string.Empty : ,)
}

我现在已经分不清string.Join()是精简了我的代码,还是复杂了我的代码了.不过确实要承认,在比较简单的情况下,string.Join()的确能减少我们很多的代码.

以上,欢迎拍砖

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏