我读到,当从 LINQ to Objects 查询投影一个新的匿名对象时,投影的对象将覆盖其Equals
和GetHashCode
方法,以便执行任何进一步检查相等性的方法将正常工作。
这让我认为,实现一个自定义运算符来投射匿名版本的传入T
可能有助于避免在我的某些类中覆盖这些方法或创建自定义 IComparers。
我想这样使用它:
var newList = list.SelectWithComparer(s => new { s }).Union(List2);
首先,这是个好主意吗?
其次,有可能吗?
我尝试了以下方法,但无法编译代码:
public static class LINQExtensions
{
public static IEnumerable<T> SelectWithComparer<T>(this IEnumerable<T> source)
{
return source.Select(s => new { s });
}
}
编译错误是由于 anynomous 类型不再是原始 T:
Error 5 Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<AnonymousType#1>' to 'System.Collections.Generic.IEnumerable<T>'. An explicit conversion exists (are you missing a cast?)
有人可以帮忙吗?
谢谢