将IEnumerable转换为Collection(不是ICollection)



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();
}
}
}

指出:

  1. 关于不使用Collection,我不能改变它。
  2. 将List赋值给Collection抛出强制转换错误。
  3. 下面的方法是可行的,有更好的选择吗?

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();

相关内容

最新更新