我有一个ReadOnlyCollection属性的类。我需要将该ReadOnlyCollection转换为一个int []。如何才能做到这一点?是否可以在不迭代集合的情况下执行此操作?如何将ReadOnlyCollection <T>转换为T []?
回答
不,不可能将ReadOnlyCollection转换为数组而不迭代它。这会使收藏变成可写的收藏,破坏只读的合同。
有迭代,不遗余力您使用CopyTo方法
int[] collection = new int[theObject.TheProperty.Count];
theObject.TheProperty.CopyTo(collection, 0);
还是扩展方法ToArray自己写循环,例如收集不同的方式:
int[] collection = theObject.TheProperty.ToArray();
当然使用LINQ扩展方法myReadOnlyCollection.ToArray()
。
严格地说,你仍然在迭代集合 - 但是再一次,你不能**重复执行此操作。 – ChrisF 2010-03-11 22:44:04
是的,它正好被框架所包围。 :) – 2010-03-12 00:15:13
没有任何方法没有迭代。有一个内置的方法来做到这一点,虽然:
T[] myArray;
myCollection.CopyTo(myArray, 0);
或使用LINQ:
var myArray = myCollection.ToArray();
'CopyTo()'把开始索引不是总数作为第二个参数...对不起,无法解决这个问题,当SO关闭时,现在更新。 – 2010-03-11 23:15:59
如果您在.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();
- 1. 如何将EntityCollection <T>转换为列表<T>
- 2. 如何将IQueryable <T>转换为列表<T>?
- 3. 如何将IQueryable <T>转换为ObjectQuery <T>?
- 4. 如何将DBQuery <T>转换为ObjectQuery <T>?
- 5. 扩展方法转换为IQueryable的<T>和IEnumerable <T>到ReadOnlyCollection <T>
- 6. 将std :: tuple <T...>转换为T
- 7. NHibernate和ReadOnlyCollection <T>
- 8. 为只读属性公开IList <T>或ReadOnlyCollection <T>?
- 9. 为什么ReadOnlyCollection <T>不是ReadOnlyList <T>?
- 10. 将JavaRDD <ArrayList<T>>转换为JavaRDD <T>
- 11. 如何将IEnumerable <IEnumerable <T>>转换为IEnumerable <T>
- 12. 如何将EntityCollection <T>转换为列表<POCOObj>
- 13. 如何将IEnumerable <AnonymousType>转换为列表<T>?
- 14. 如何将<?>类转换为<T>类?
- 15. 将java.lang.reflect.Type转换为类<T> clazz
- 16. 将DataRowCollection转换为IEnumerable <T>
- 17. 将列表<T>转换为ObservableCollection <T>
- 18. 将'System.Collections.Generic.IEnumerable <T>'转换为'System.Collections.ObjectModel.Collection <T>'
- 19. 将数据集转换为IQueryable <T>或IEnumerable <T>
- 20. 将IList <T>转换为BindingList <T>
- 21. 将一个`TransformingRandomAccessList <T>`转换为`List <T>`
- 22. 如何将一个同步功能<T>转换为IObservable <T>
- 23. 如何将IOrderedEnumerable <T>转换为使用OrderBy和ThenBy的PagedList <T>?
- 24. 如何将LambdaExpression转换为键入的表达式<Func<T, T>>
- 25. ReadOnlyCollection <T>线程安全
- 26. FxCop CA2227警告和ReadOnlyCollection <T>
- 27. 如何将System.Collection.IEnumerable转换为c#中的列表<T>?
- 28. 如何将列表<T>转换为DataSet?
- 29. 如何将GroupedEnumerable转换为IEnumerable <T>
- 30. 我如何将Func <T,object>转换为PropertyInfo
什么的C#版本你正在用吗?有一百万种方法来剥皮这只猫。 – Josiah 2010-03-11 22:41:42
C#3.0与.NET 3.5 – 2010-03-11 22:44:10
据推测,该集合将在某个时候迭代 - 也许代码可以接受IEnumerable而不是T []。 –
Pat
2010-03-11 22:45:21