C#如何在每个单词之后放置一个逗号,但列表中的最后一个

Dan*_*gis 23 c#

我完全不熟悉C#并且在学习的过程中学习.我遇到了一个问题,我希望有经验的程序员可以提供帮助.我在表单中添加了一个CheckedListBox,并添加了一个包含6个项目的集合.除了最后选择的项目之外我还需要一个逗号放在旁边,所以我的问题是:我怎么能告诉C#不要在最后选择的项目旁边放一个逗号?

foreach (object itemChecked in RolesCheckedListBox.CheckedItems)
{
    sw.Write(itemChecked.ToString() + ",");
}
Run Code Online (Sandbox Code Playgroud)

感谢您的任何帮助!担

Eli*_*sha 49

它可以使用string.Join()方法完成:

string commaSeparated = string.Join(",", 
                RolesCheckedListBox.CheckedItems.Select(item => item.ToString());
Run Code Online (Sandbox Code Playgroud)

例如:

string[] names = new []{ "a", "b"};
string separatedNames = string.Join(",", names);
Run Code Online (Sandbox Code Playgroud)

结果separatedNames会是"a,b"

  • `Select`仅为`IEnumerable <T>`定义,因此你需要在CheckedItems之后放置'Cast <object>()`,因为它只实现了'IEnumerable`. (2认同)

Eri*_*ert 8

以下是我写的关于这个问题的一些文章:

http://blogs.msdn.com/b/ericlippert/archive/2009/04/13/restating-the-problem.aspx

http://blogs.msdn.com/b/ericlippert/archive/2009/04/15/comma-quibbling.aspx

对第二篇文章的评论有几十个解决方案来解决一个稍微更难的问题; 浏览这些解决方案并了解哪些是优雅的,哪些是您认为粗略的,这是很有教育意义的.


Uwe*_*eim 6

一种增强你的例子的方法可能是:

var index = 0;
foreach (object itemChecked in RolesCheckedListBox.CheckedItems)
{
    if ( index>0 ) sw.Write( "," );
    sw.Write(itemChecked.ToString());
    index++;
}
Run Code Online (Sandbox Code Playgroud)

不优雅,但工作.