将 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();
}
}
}
备注:
- 关于不用Collection,我改不了
- 将列表分配给 Collection 会引发转换错误。
- 下面的方法不知何故有效,还有更好的选择吗?
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();
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();
}
}
}
备注:
- 关于不用Collection,我改不了
- 将列表分配给 Collection 会引发转换错误。
- 下面的方法不知何故有效,还有更好的选择吗?
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();