【问题标题】:C# How to place a comma after each word but the last in the listC#如何在每个单词之后放置逗号,但列表中的最后一个
【发布时间】:2011-01-15 12:48:41
【问题描述】:

我对 C# 完全陌生,并且边走边学。我被困在我希望有经验的程序员可以提供帮助的问题上。我在表单中添加了一个 CheckedListBox,并向其中添加了 6 个项目的集合。我需要除了最后一个选定的项目之外的所有项目都在其旁边放置一个逗号,所以我的问题是:我如何告诉 C# 不要在最后一个选定的项目旁边放置一个逗号?

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

感谢您提供的任何帮助! 丹

【问题讨论】:

标签: c#


【解决方案1】:

可以使用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"

【讨论】:

  • Select 仅为IEnumerable<T> 定义,因此您需要将Cast<object>() 放在CheckedItems 之后,因为它仅实现IEnumerable
  • @Lee,很好,RolesCheckedListBox.CheckedItems.Cast().Select(item => item.ToString()) 可能是必需的
【解决方案2】:

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

var commaSeparated = string.Join(",", RolesCheckedListBox.CheckedItems);

【讨论】:

    【解决方案3】:

    在 .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;
    }
    

    【讨论】:

      【解决方案4】:

      您可以使用Join 函数代替循环:

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

      【讨论】:

        【解决方案5】:

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

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

        不优雅,但工作。

        【讨论】:

          【解决方案6】:
          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()));
          

          【讨论】:

          • 非常好!用两行代码解决前导逗号问题!
          【解决方案7】:
          foreach (object itemChecked in RolesCheckedListBox.Items)
                      {
                          if (itemChecked != RolesCheckedListBox.Items[RolesCheckedListBox.Items.Count - 1])
                              sw.Write(itemChecked.ToString() + ",");
                      }
          

          这应该对你有帮助。另外,我只使用了“Items”,您使用了 CheckedItems。如果您只想遍历选中的项目,请将所有项目实例更改为 CheckedItems。

          【讨论】:

          • 感谢大家的快速回复,这很有效!!
          【解决方案8】:

          Jon Skeet 针对此类问题实施了SmartEnumerable

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-06-12
            相关资源
            最近更新 更多