2010-03-11 72 views
3

我有一个ReadOnlyCollection属性的类。我需要将该ReadOnlyCollection转换为一个int []。如何才能做到这一点?是否可以在不迭代集合的情况下执行此操作?如何将ReadOnlyCollection <T>转换为T []?

+0

什么的C#版本你正在用吗?有一百万种方法来剥皮这只猫。 – Josiah 2010-03-11 22:41:42

+0

C#3.0与.NET 3.5 – 2010-03-11 22:44:10

+0

据推测,该集合将在某个时候迭代 - 也许代码可以接受IEnumerable 而不是T []。 – Pat 2010-03-11 22:45:21

回答

9

不,不可能将ReadOnlyCollection转换为数组而不迭代它。这会使收藏变成可写的收藏,破坏只读的合同。

有迭代,不遗余力您使用CopyTo方法

int[] collection = new int[theObject.TheProperty.Count]; 
theObject.TheProperty.CopyTo(collection, 0); 

还是扩展方法ToArray自己写循环,例如收集不同的方式:

int[] collection = theObject.TheProperty.ToArray(); 
6

当然使用LINQ扩展方法myReadOnlyCollection.ToArray()

+1

严格地说,你仍然在迭代集合 - 但是再一次,你不能**重复执行此操作。 – ChrisF 2010-03-11 22:44:04

+0

是的,它正好被框架所包围。 :) – 2010-03-12 00:15:13

5

没有任何方法没有迭代。有一个内置的方法来做到这一点,虽然:

T[] myArray; 
myCollection.CopyTo(myArray, 0); 

或使用LINQ:

var myArray = myCollection.ToArray(); 
+0

'CopyTo()'把开始索引不是总数作为第二个参数...对不起,无法解决这个问题,当SO关闭时,现在更新。 – 2010-03-11 23:15:59

1

如果您在.NET框架ReadOnlyCollection<T>实现IEnumerable<T>的更高版本是。 IEnumerable<T>有一个扩展方法ToArray()。所以你会使用像这样的扩展方法...

var readOnly = new ReadOnlyCollection<int>(new List<int>() {1,2,3,4,5}); 
var myArray = readOnly.ToArray(); 
相关问题