泛型类和 IEquatable 问题

Pap*_*ome 5 c# generics nunit interface .net-4.0

我想要一个通用类来实现 IEquatable<T> 接口。该类具有 T 类型的数据项。为了使泛型类可等同,数据项也必须是这样的。

这是我的通用类:

public class V<T> : IEquatable<V<T>> where T : IEquatable<T>
{
    public V(T[] Value)
    {
        this.Value = Value;
    }

    T[] Value { get; set; }

    public bool Equals(V<T> other)
    {
        if (Value.Count() != other.Value.Count()) return false;

        for (int i = 0; (i < Value.Count()) && i < other.Value.Count(); i++)
        {
            if (!Value[i].Equals(other.Value[i])) return false;
        }

        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题就在这里。当我编译上面的泛型类时,我收到以下消息。

“Myspace.Generic.V`1[T]”上的 GenericArguments[0]、“T”违反了类型参数“T”的约束。

我的推理哪里出错了,或者我的泛型类出了什么问题?

注意:当我省略IEquatable<V<T>>泛型类和完整的代码public bool Equals(V<T> other)时,泛型类将编译并可用。除了编译器检测 IEquitable 之外。

public class V<T> where T : IEquatable<T>
{
Run Code Online (Sandbox Code Playgroud)

上面的代码可以工作,但是 的实例V<T>不再被识别为 IEquitable

注2:感谢 dasblinkenlight 在自己的解决方案中尝试此代码,我发现这很可能是配置问题而不是编码问题。我现在认为这个具体问题已得到解答,但我尚未确定我的配置问题。

注3:问题的实际原因是NUnit测试模块通过访问器加载dll。需要更改测试程序,但IEquatable<V<T>>现在使用没有任何问题。

问题解决了。

das*_*ght 2

您的通用类没有任何问题。您作为泛型参数传递的类有问题T。即,SomeClass您传入的类V<SomeClass>未实现IEquitable<SomeClass>.

您的V<T>类需要TIEquitable<T>. 您需要它才能使用表达式检查数组的元素是否相等Value[i].Equals(other.Value[i])。如果您用作V<T>泛型参数的任何类与其自身不相等,编译器会抱怨。