将List<string>转换为StringCollection

16

我需要上述功能,因为我只能将StringCollection存储到设置中,而无法存储字符串列表。

如何将列表转换为StringCollection?

4个回答

38

如何尝试:

StringCollection collection = new StringCollection();
collection.AddRange(list.ToArray());

另一种避免中间数组的方法(但可能涉及更多的重新分配):

StringCollection collection = new StringCollection();
foreach (string element in list)
{
    collection.Add(element);
}

LINQ 简化了转换回去的过程:

List<string> list = collection.Cast<string>().ToList();

只是好奇,为什么建议避免使用中间数组? - TtT23
1
@l46kok:其他条件相同的情况下,避免额外的中间拷贝总是值得推荐的。然而,在这种情况下,由于额外的重新分配,哪种方法更有效并不明显,而且也可能并不重要,因为通常设置集合的大小比较小。 - Marcelo Cantos
@MarceloCantos:总是吗?我不会这么做。第一个代码显然更简单,而且既然(就像你所说)可能不那么重要,我会坚持采用可能效率稍低但更明显的方法。 - Jon Skeet
@JonSkeet:你是对的。我在“其他所有事情都相等”的前提下考虑到了这一点,但我的表述不够清晰。 - Marcelo Cantos

5
使用 List.ToArray() 将 List 转换为数组,您可以使用该数组将值添加到您的 StringCollection 中。
StringCollection sc = new StringCollection();
sc.AddRange(mylist.ToArray());

//use sc here.

阅读 这篇文章


2
为什么你要写 string[] str = mylist.ToArray();,而不是直接写 sc.AddRange(mylist.ToArray()); 呢? - dtsg
2
@john:告诉他 mylist.ToArray() 会返回什么,以及 AddRange() 接受什么参数。 - Nikhil Agrawal
2
使用.ToArray();难道不是很明显吗? - dtsg
@john 真是浪费投票权啊。Jon的回答和他的回答几乎一样,但他还是得到了2个踩... - Amit Mittal
@AmitMittal:我敢肯定OP提出这个问题是因为他不是为了好玩而创建了StringCollection。他将在后续代码中使用它,而我也这样做了。 - Nikhil Agrawal
显示剩余3条评论

0
这是一个扩展方法,用于将 IEnumerable<string> 转换为 StringCollection。它的工作方式与其他答案相同,只是进行了包装。
public static class IEnumerableStringExtensions
{
    public static StringCollection ToStringCollection(this IEnumerable<string> strings)
    {
        var stringCollection = new StringCollection();
        foreach (string s in strings)
            stringCollection.Add(s);
        return stringCollection;
    }
}

0

我更倾向于:

Collection<string> collection = new Collection<string>(theList);

有些情况需要使用StringCollection,例如剪贴板操作。 - Geordie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接