繁体   English   中英

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

[英]C# How to place a comma after each word but the last in the list

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

foreach (object itemChecked in RolesCheckedListBox.CheckedItems)
{
    sw.Write(itemChecked.ToString() + ",");
}

感谢您的任何帮助!

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

string commaSeparated = string.Join(",", 
                RolesCheckedListBox.CheckedItems.Select(item => item.ToString());

例如:

string[] names = new []{ "a", "b"};
string separatedNames = string.Join(",", names);

将导致separatedNames"a,b"

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

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

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

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

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

不优雅,但工作。

您可以使用Join函数而不是循环:

sw.Write(string.Join(",", RolesCheckedListBox.CheckedItems));

在4.0中,您可以简单地使用string.Join(字符串分隔符,IEnumerable值)为所有非空值调用ToString()方法:

var commaSeparated = string.Join(",", RolesCheckedListBox.CheckedItems);
  1. 使用linq将ListItemCollection转换为字符串数组
  2. 使用String.Join

喜欢:

public string ItemsToString(ListItemCollection items)
{
    string[] stringArray = (from ListItem item in items where item.Selected select item.ToString()).ToArray();
    return String.Join(", ", stringArray);
}

你可以用它

sw.Write(ItemsToString(RolesCheckedListBox.CheckedItems));

或者,如果您更喜欢这条作业的单行:

sw.Write(String.Join(", ", (from ListItem item in RolesCheckedListBox.CheckedItems select item.ToString()).ToArray()));

在.Net 4中,您可以使用静态String.Join<T> Method (String, IEnumerable<T>)并打印连接字符串。

否则,简单的方法是将逗号添加到所有元素,但第一个:

bool shouldPrependComma = false;
foreach (object itemChecked in RolesCheckedListBox.CheckedItems) 
{
  if (shouldPrependComma) sw.Write(",");
  sw.Write(itemChecked.ToString());
  shouldPrependComma = true;
}
foreach (object itemChecked in RolesCheckedListBox.Items)
            {
                if (itemChecked != RolesCheckedListBox.Items[RolesCheckedListBox.Items.Count - 1])
                    sw.Write(itemChecked.ToString() + ",");
            }

那应该对你有帮助。 另外,我刚使用了“Items”,你使用了CheckedItems。 如果您只想迭代已检查的项目,请将所有项目实例更改为CheckedItems。

Jon Skeet为这类问题实施了SmartEnumerable

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM