.NET编译器不会将System.Linq.IOrderedEnumerable<T>
隐式转换为System.Collections.Generic.List<T>
明确的演员:
using System.Collections.Generic;
var items = new List<MyType>;
var selectedItems =
from item in items
where item.Active
select item;
return (List<MyType>)selectedItems;
发出警告:
Suspicious cast: there is no type in the solution which inherits from both System.Linq.IOrderedEnumerable<MyType> and System.Collections.Generic.List<MyType>
这里的最佳做法是什么
答案 0 :(得分:17)
只需使用ToList
扩展程序:
return selectedItems.ToList();
你应该知道:最佳实践(因为你问过)实际上希望你在大多数情况下返回IEnumerable<MyType>
。因此,您可能希望以这种方式更改签名:
public IEnumerable<MyType> MyFunction()
{
// your code here
}
然后,如果需要,将功能的结果列在一个列表中:
var myList = MyFunction().ToList();
除非您有一个非常准确的原因要求退回List<>
类型,否则我强烈建议您不要这样做。
希望有所帮助。
答案 1 :(得分:3)
使用System.Linq.Enumerable.ToList<T>()
扩展程序:
selectedItems.ToList();