首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泛型类和IEquatable问题

泛型类和IEquatable问题
EN

Stack Overflow用户
提问于 2013-02-09 11:38:09
回答 1查看 2.4K关注 0票数 4

我想要一个泛型类来实现IEquatable接口。这个类有类型T的数据项,因为泛型类是相等的,数据项也需要相等。

下面是我的泛型类:

代码语言:javascript
复制
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;
    }
}

这就是问题所在。当我编译上面的泛型类时,我会得到以下消息。

GenericArguments,Myspace.Generic.V`1T上的'T‘违反了类型参数'T’的约束。

我在推理中犯了什么错误,或者我的泛型类有什么问题?

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

代码语言:javascript
复制
public class V<T> where T : IEquatable<T>
{

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

Note2:感谢dasblinkenlight自己在解决方案中尝试了这段代码,我发现这很可能是一个配置问题,而不是编码问题。我现在认为这个特定的问题已经解决了,但是我还没有确定我的配置问题。

Note3:问题的实际原因是一个通过访问器加载dll的NUnit测试模块。更改测试过程是必需的,但是现在使用IEquatable<V<T>>解决任何问题。

问题解决了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-09 11:41:21

您的泛型类没有什么问题。要作为泛型参数T传递的类有问题。也就是说,SomeClass,您在V<SomeClass>中传递的类并不实现IEquitable<SomeClass>

您的V<T>类要求TIEquitable<T>的实现。您需要它来使用Value[i].Equals(other.Value[i])表达式逐个检查数组的元素相等性。如果使用任何类作为V<T>的泛型参数对自己不公平,编译器就会抱怨。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14787697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档