Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#参考集<;T>;_C#_.net - Fatal编程技术网

C#参考集<;T>;

C#参考集<;T>;,c#,.net,C#,.net,我需要一个“引用集”,也就是说,一个几乎是散列集的集合,但它使用对象的引用,而不是它们的散列码。在哪里可以找到这样的类,或者如何实现这样的类?为了澄清,我不在乎它是否在内部像使用引用的哈希集一样工作,我只希望它在外部像它一样工作。我不希望使用外部库,但欢迎链接到具有此类库的库的源代码(这样我就可以自己使用它来了解如何实现一个库)。标准哈希集允许您提供自定义比较器,比较器负责对集合元素进行散列和相等性检查。给它一个身份比较器,你就会得到你描述的功能 public sealed class Iden

我需要一个“引用集”,也就是说,一个几乎是散列集的集合,但它使用对象的引用,而不是它们的散列码。在哪里可以找到这样的类,或者如何实现这样的类?为了澄清,我不在乎它是否在内部像使用引用的哈希集一样工作,我只希望它在外部像它一样工作。我不希望使用外部库,但欢迎链接到具有此类库的库的源代码(这样我就可以自己使用它来了解如何实现一个库)。

标准
哈希集允许您提供自定义比较器,比较器负责对集合元素进行散列和相等性检查。给它一个身份比较器,你就会得到你描述的功能

public sealed class IdentityComparer<T> : IEqualityComparer<T>
    where T : class
{
    public bool Equals(T x, T y)
    {
        return ReferenceEquals(x, y);
    }

    public int GetHashCode(T obj)
    {
        return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(obj);
    }
}
public sealed class identity comparer:IEqualityComparer
T:在哪里上课
{
公共布尔等于(TX,TY)
{
返回引用等于(x,y);
}
公共int GetHashCode(T obj)
{
返回System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(obj);
}
}

标准的
HashSet
允许您提供一个自定义比较器,该比较器负责对集合元素进行散列并执行相等性检查。给它一个身份比较器,你就会得到你描述的功能

public sealed class IdentityComparer<T> : IEqualityComparer<T>
    where T : class
{
    public bool Equals(T x, T y)
    {
        return ReferenceEquals(x, y);
    }

    public int GetHashCode(T obj)
    {
        return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(obj);
    }
}
public sealed class identity comparer:IEqualityComparer
T:在哪里上课
{
公共布尔等于(TX,TY)
{
返回引用等于(x,y);
}
公共int GetHashCode(T obj)
{
返回System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(obj);
}
}

这感觉像是XY问题-。你为什么要这样做?你能告诉我们为什么不能使用
HashSet
使用
ReferenceEqualityComparer
@mjwills我不知道Hashset可以接受IEqualityComparers。感谢您的快速解决方案。这感觉像是一个XY问题-。你为什么要这样做?你能告诉我们为什么不能使用
HashSet
使用
ReferenceEqualityComparer
@mjwills我不知道Hashset可以接受IEqualityComparers。感谢您的快速解决方案。“RuntimeHelpers.GetHashCode方法总是调用Object.GetHashCode”,那么它与标准HashSet有何不同呢?@HenkHolterman这正是它的不同之处。例如,给定一个字符串,它将调用
对象.GetHashCode
方法,这意味着非虚拟的,而不是对
GetHashCode
的虚拟调用将导致的
字符串.GetHashCode
实现。这正是我需要的,谢谢@hvd-好的,公平点。不过还是个问题。在什么情况下会更好?例如,对于
HashSet
“RuntimeHelpers.GetHashCode方法总是调用Object.GetHashCode”,那么它与标准HashSet有何不同呢?@HenkHolterman这正是它的不同之处。例如,给定一个字符串,它将调用
对象.GetHashCode
方法,这意味着非虚拟的,而不是对
GetHashCode
的虚拟调用将导致的
字符串.GetHashCode
实现。这正是我需要的,谢谢@hvd-好的,公平点。不过还是个问题。在什么情况下会更好?例如,对于
HashSet