如何解决如何将 linq 结果转换为 HashSet 或 HashedSet
我不 认为 有任何内置的东西可以做到这一点......但编写扩展方法真的很容易:
public static class Extensions
{
public static HashSet<T> ToHashSet<T>(
this IEnumerable<T> source,
IEqualityComparer<T> comparer = null)
{
return new HashSet<T>(source, comparer);
}
}
请注意,您确实需要一个扩展方法(或至少是某种形式的通用方法),因为您可能无法明确表达 的类型T
:
var query = from i in Enumerable.Range(0, 10)
select new { i, j = i + 1 };
var resultSet = query.ToHashSet();
你不能通过显式调用HashSet<T>
构造函数来做到这一点。我们依靠泛型方法的类型推断来为我们做这件事。
现在您 可以 选择命名ToSet
并返回ISet<T>
- 但我会坚持使用ToHashSet
具体类型。这与标准 LINQ 运算符 (ToDictionary
, ToList
) 一致,并允许将来扩展 (例如ToSortedSet
)。您可能还希望提供指定要使用的比较的重载。
解决方法
我在一个 ISet 类上有一个属性。我正在尝试将 linq 查询的结果放入该属性中,但不知道该怎么做。
基本上,寻找这个的最后一部分:
ISet<T> foo = new HashedSet<T>();
foo = (from x in bar.Items select x).SOMETHING;
也可以这样做:
HashSet<T> foo = new HashSet<T>();
foo = (from x in bar.Items select x).SOMETHING;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。