关于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) })
@(
++ ==  Model.Categorys.Count  ?   string .Empty :  " , " )
}

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

以上,欢迎拍砖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值