[Linq].NET/C#程序开发中如何将Linq的查询结果转换成HashSet或者HashedSet?

.NET 作者: Rector 117阅读 0评论 0收藏 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

当前有一个Linq查询表达式,是从一个ISet集合中查询一些数据,现在需要将这个Linq查询的结果转换成HashSet集合,Linq查询如下:

ISet<T> foo = new HashedSet<T>();
foo = (from x in bar.Items select x).SOMETHING;

或者转换成HastSet<T>,如下:

HashSet<T> foo = new HashSet<T>();
foo = (from x in bar.Items select x).SOMETHING;

在[Linq].NET/C#程序开发中,如何将Linq的查询结果转换成HashSet或者HashedSet?

方案一

创建一个由IEnumerable<T>转换到HashSet<T>的静态扩展方法,如下:

public static class Extensions
{
    public static HashSet<T> ToHashSet<T>(
        this IEnumerable<T> source,
        IEqualityComparer<T> comparer = null)
    {
        return new HashSet<T>(source, comparer);
    }
}

或者也可以直接使用Linq查询表达式的查询结果IQueryableToHashSet()方法转换,如:

var query = from i in Enumerable.Range(0, 10)
            select new { i, j = i + 1 };
var resultSet = query.ToHashSet();

方案二

HashSet<T> foo = new HashSet<T>(from x in bar.Items select x);

或者创建一个静态扩展方法,方便以后调用,如:

public static HashSet<T> ToHashSet<T>(this IEnumerable<T> items)
{
    return new HashSet<T>(items);
}

方案三

还是一个转换成ISet<T>的静态扩展方法:

public static ISet<T> EnsureSet<T>(this IEnumerable<T> source)
{
    ISet<T> result = source as ISet<T>;
    if (result != null)
        return result;
    return new HashSet<T>(source);
}

阅读了该文章的人还浏览了...

本文永久链接图享网 » [Linq].NET/C#程序开发中如何将Linq的查询结果转换成HashSet或者HashedSet?

发布于: 2018-02-06 11:17:30
分享扩散:

文章评论

获取验证码