如何在Razor中用逗号分隔列表且不显示末尾逗号?
哦,我明白你的问题了!你现在的写法其实没用到String.Join的正确用法,所以才会出现语言名直接连在一起的情况。让我给你拆解一下问题,再给你几个靠谱的解决办法:
问题出在哪?
你现在是在foreach循环里逐个处理每个Language对象,每次调用String.Join(",", language.language)的时候,第二个参数只是单个字符串(当前循环的语言名),String.Join遇到单个元素的时候只会直接返回它,相当于你每次只是输出language.language,自然就把所有名字连在一起了,完全没起到拼接分隔的作用。
正确的解决办法
方法一:直接用String.Join处理整个集合(推荐)
String.Join本来就是用来处理集合的,它会自动在元素之间插入分隔符,而且绝对不会在末尾多出来一个逗号。你只需要先把Language集合转换成语言名字符串的集合,再传给String.Join就行:
@string.Join(",", Model.apiAgent.languages.Select(l => l.language))
注意:如果你的视图里没引用System.Linq的话,要在页面顶部加一句@using System.Linq(大部分项目默认已经包含了,但保险起见可以检查一下)。
方法二:用foreach手动控制逗号(适合需要自定义操作的场景)
如果你因为某些原因必须用foreach循环,那可以通过一个标记变量来判断是不是第一个元素,非第一个元素先输出逗号再输出语言名:
@{ bool isFirstItem = true; foreach (Language language in Model.apiAgent.languages) { if (!isFirstItem) { @:, <!-- 输出逗号,注意前面的@和逗号之间的冒号 --> } @language.language isFirstItem = false; } }
这样第一个元素前面不会有逗号,后面的元素都会先输出逗号再显示名字,完美避免末尾逗号的问题。
总结
第一种方法代码更简洁,是最推荐的写法;第二种方法适合你需要在每个元素之间做更多自定义逻辑(比如加个空格、或者某些元素特殊处理)的场景。
内容的提问来源于stack exchange,提问作者nik




