微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将 linq 结果转换为 HashSet 或 HashedSet

如何解决如何将 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 举报,一经查实,本站将立刻删除。