我对C#完全陌生,随时随地学习。我遇到了一个问题,我希望有经验的程序员可以提供帮助。我在表单中添加了一个CheckedListBox,并添加了一个包含6个项目的集合。我需要除了选择的最后一项以外的所有项目,所以我的问题是:我怎么能告诉C#不要在最后选择的项目旁边放一个逗号?
foreach (object itemChecked in RolesCheckedListBox.CheckedItems)
{
sw.Write(itemChecked.ToString() + ",");
}
感谢您的任何帮助! 丹
答案 0 :(得分:48)
可以使用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"
答案 1 :(得分: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
对第二篇文章的评论有几十个解决方案来解决这个问题稍微有点难的问题;浏览这些解决方案并了解哪些解决方案优雅,哪些解决方案很有用,这是很有教育意义的。
答案 2 :(得分:6)
增强示例的一种方法可能是:
var index = 0;
foreach (object itemChecked in RolesCheckedListBox.CheckedItems)
{
if ( index>0 ) sw.Write( "," );
sw.Write(itemChecked.ToString());
index++;
}
不优雅,但工作。
答案 3 :(得分:4)
您可以使用Join函数代替循环:
sw.Write(string.Join(",", RolesCheckedListBox.CheckedItems));
答案 4 :(得分:3)
在4.0中,你可以简单地使用string.Join(string separator, IEnumerable values)为所有非空值调用ToString()方法:
var commaSeparated = string.Join(",", RolesCheckedListBox.CheckedItems);
答案 5 :(得分:1)
像:
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()));
答案 6 :(得分:1)
在.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;
}
答案 7 :(得分:0)
foreach (object itemChecked in RolesCheckedListBox.Items)
{
if (itemChecked != RolesCheckedListBox.Items[RolesCheckedListBox.Items.Count - 1])
sw.Write(itemChecked.ToString() + ",");
}
那应该对你有所帮助。另外,我刚使用了“Items”,你使用了CheckedItems。如果您只想迭代已检查的项目,请将所有项目实例更改为CheckedItems。
答案 8 :(得分:0)
Jon Skeet针对此类问题实施了SmartEnumerable。