将 IEnumerable 转换为 Collection(不是 ICollection)

Convert IEnumerable to Collection (not ICollection)

Linq returns IEnumerable 并且代码有一个 Collection。如何将 Linq 操作的 return 值分配给 Collection 变量?

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. 将列表分配给 Collection 会引发转换错误。
  3. 下面的方法不知何故有效,还有更好的选择吗?

Collection<string> myCollection = new Collection(myList.Select(x => x).ToList());

如果您必须使用Collection<T>为什么不实施扩展方法以便与[=一起使用它17=]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();