我使用扩展方法OrderBy和ThenBy在多个字段上对自定义集合进行排序。这种排序不会影响集合,而是返回并且IEnumberable。我无法将IEnumerable结果投射到我的自定义集合中。无论如何改变我的集合的顺序或将IEnumerable结果转换为我的自定义集合?如何将IEnumerable转换为C#中的自定义类型?
回答
如果您收藏类型实现IList<T>
(要能Add()
它),你可以写一个扩展方法:
public static Extensions
{
public static TColl ToTypedCollection<TColl, T>(this IEnumerable ien)
where TColl : IList<T>, new()
{
TColl collection = new TColl();
foreach (var item in ien)
{
collection.Add((T) item);
}
return collection;
}
}
不,没有。在使用查询操作符时,它不会使用原始集合的实例来生成枚举。相反,它使用私有实现(可能是匿名的,可能不是)来提供此功能。
如果你想它原来的集合中,你应该有这需要一个IEnumerable<T>
(或任何您的收藏店,如果它是具体的),然后通过查询构造类型的构造函数。
然后,您可以使用它来创建IEnumerable<T>
称为To<YourCollectionType>
扩展方法,其将采取IEnumerable<T>
,然后把它传递给你的类型的构造函数和返回。
不可以。您可以按照ToList和ToDictionary扩展方法建立的模式 - 编写一个类似的扩展方法来从IEnumerable中加载自己的集合类型。
您可以编写您自己的IComparer实例,以便能够对自定义收集进行排序。
蛮力,你可以通过IEnumerable循环,并将每个项目转储回您的自定义集合的新实例。
您可以IEnumerable的初始化列表:
如果项目是IEnumerable类型,你可以创建像这样的列表:
var list = new List<string>(items);
,或者你可以简单地调用items.ToList( ):
var list = items.ToList();
您的自定义集合实现了哪些接口?
如果一个IList那么你可以在IEnumerable的 做.ToList()如果一个IDictionary那么你可以在IEnumerable的 等做.ToDictionary()..
将它带给更适合你的东西。
如果没有类似的东西,你可以为IEnumerable编写扩展方法为.ToMyCollection()。
枚举和集合是相当不同的野兽。
枚举只允许枚举集合具有基于索引的访问器,计数属性等。要创建一个集合,你实际上必须枚举IEnumerable。像列表<T>典型的集合将有一个接受IEnumerable的构造函数。尽管如此,枚举仍将执行。
如果你看看System.Linq。枚举类有
var myEnumerable = this.GetEnumerator();
var array = myEnumerable.ToArray();
var list myEnumerable.ToList();
你可以按照这个方法,并创建一个自定义的扩展方法,将转换到您的自定义集合的几个扩展方法,将aloow你给你的IEnumerable类型转换到任何一个数组,ToList
public static CustomCollection<TSource> ToCustomCollection<TSource>(this IEnumerable<TSource> source);
LINQ很酷,因为它把源的集合像这样为永恒不变的 - 它不修改它们。使用扩展方法只需按照您指定的替代顺序枚举它们即可 - 您不是以这种方式构建新的自定义列表。
我建议两个选项:
- 构建基于对您的LINQ-ING
- 实现排序功能集成到您的自定义集合的结果的新列表自己(或使用一个很好的排序泛型集合作为基地),所以它可以就地排序。
你真的需要一个定制的集合类型呢?这听起来像你想要做的一切都是由现有的泛型集合类型提供的,也许你只需要添加一个扩展方法或为他们。
- 1. 类型转换为自定义类 - C++
- 2. Visual C#将自定义IEnumerable转换为字符串[]
- 3. 如何将字符串转换为自定义数据类型
- 4. 如何将XNode转换为自定义类型?
- 5. Haskell Aeson:如何将值转换为自定义类型?
- 6. 如何将自定义类型转换为字符串?
- 7. 使用转换将字符串转换为自定义类型
- 8. 将自定义类型转换为基类型
- 9. C++定义类型转换
- 10. 无法将IEnumerable的匿名类型转换为IEnumerable <dynamic>?
- 11. InvalidCastException当转换为定义类型C#
- 12. 如何将我的自定义类转换为iOS中的自定义框架?
- 13. 如何在C#中定义自定义泛型转换器
- 14. 如何将NumPy数据类型转换为自定义数据类型?
- 15. 如何将自定义对象转换为Objective C中的NSString?
- 16. 如何将XML转换为c中的自定义对象#
- 17. C++ - 从自定义类转换为内建类型
- 18. IEnumerable的类型转换
- 19. 如何将Object []类型转换为用户自定义的阵列型
- 20. 将自定义类型转换为.NET库类
- 21. 在Swift中为自定义类型定义显式转换
- 22. 将自定义类型从VB6转换为C#中的List <>?
- 23. 将Fortran用户定义类型转换为C++类
- 24. 如何将查询结果中的对象转换为自定义类型
- 25. 如何将自定义类型转换为VS2012中的字符串?
- 26. 将VB转换为C#类型转换
- 27. 将字符串转换为自定义类型的Haskell
- 28. 在PHP中转换为自定义类的类型
- 29. 如何绑定自定义类型的集合(IEnumerable)?
- 30. 如何将字符串类型转换为用户定义的自定义类型
或铸造操作者,对于这种情况似乎更好。 – Dykam 2009-07-13 21:28:36
错字:铸造操作员 – Dykam 2009-07-13 21:29:12