Linq返回IEnumerable,代码有一个Collection。如何分配一个Linq操作的返回值收集变量?
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
var myList = new List<string> {"item"};
Collection<string> myCollection = myList.Select(x => x);
foreach (var item in myList)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}
}
指出:
- 关于不使用Collection,我不能改变它。
- 将List赋值给Collection抛出强制转换错误。
- 下面的方法是可行的,有更好的选择吗?
Collection<string> myCollection = new Collection(myList.Select(x => x).ToList());
如果必须与Collection<T>
一起工作,为什么不实现扩展方法以便与Linq:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
...
public static partial class EnumerableExtensions {
public static Collection<T> ToCollection<T>(this IEnumerable<T> source) {
if (source is null)
throw new ArgumentNullException(nameof(source));
Collection<T> result = new Collection<T>();
foreach (T item in source)
result.Add(item);
return result;
}
}
那么你可以像
那样简单地使用它var myCollection = myList
.Select(item => item) //TODO: Put actual query here
.ToCollection();