将ICollection<string>转换为string[]

19

我有一个类型为 ICollection<string> 的对象。如何最好地转换成 string[]

在 .NET 2 中应该如何做?
在 C# 3 中的较新版本中,如何更加简洁地做到这一点,也许可以使用 LINQ?

3个回答

35

您可以使用以下代码将它转换成普通数组:

string[] array = new string[collection.Count];
collection.CopyTo(array, 0);

那就可以了 :)


我需要先用正确的大小初始化数组吗?难道我不能只这样做: string[] futures = new string[] {}; FutureFVDictionary.Keys.CopyTo(futures, 0); ; - leora
1
数组必须先被初始化为正确的大小 - 否则 CopyTo 将会抛出 ArgumentException 异常。 - AdrianoKF
使用List<String>(mycoll).ToArray(),您不必担心大小。 - gimel
@AdrianoKF 第一行应该是 string[] array = new string[collection.Count];,因为 ICollection 有一个 Count 属性。 - Paolo Moretti

8
如果您正在使用C# 3.0和.Net框架3.5,您应该能够执行以下操作:
ICollection<string> col = new List<string>() { "a","b"};
string[] colArr = col.ToArray();

当然,在文件顶部必须加上"using System.Linq;"。

自 .NET 2.0 起,List<T> 类型已经有了 ToArray 方法,因此如果您正在使用 List<T>,则不需要 System.Linq。 - Cameron MacFarland
6
他要求获取一个ICollection<string>对象。 - CVertex
1
这是我认为最好的答案。 - reggaeguitar

7
在(微不足道的)情况下,对于ICollection<String>,请使用ToArray:
String[] GetArray(ICollection<String> mycoll)
{
    return mycoll.ToArray<String>();
}

编辑:使用.Net 2.0,您可以通过额外的List<String>返回数组:

String[] GetArray(ICollection<String> mycoll)
{
    List<String> result = new List<String>(mycoll);
    return result.ToArray();
}

编译器可以推断类型参数,因此mycoll.ToArray()就可以了,不需要<string>部分。 - Daniel Earwicker
1
List<T>.ToArray方法使用数组复制,因此直接进行数组复制比创建另一个对象的列表更好。 - Cameron MacFarland
1
List<String>(mycoll).ToArray() 抽象了数组的创建和复制细节。 - gimel

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