我想要一个泛型类来实现IEquatable接口。这个类有类型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;
}
}这就是问题所在。当我编译上面的泛型类时,我会得到以下消息。
GenericArguments,Myspace.Generic.V`1T上的'T‘违反了类型参数'T’的约束。
我在推理中犯了什么错误,或者我的泛型类有什么问题?
注意:当我将IEquatable<V<T>>放在泛型类和完整的public bool Equals(V<T> other)代码中时,泛型类就会编译,并且是可用的。除了由编译器检测IEquitable之外。
public class V<T> where T : IEquatable<T>
{上面的代码可以工作,但是V<T>的实例不再被识别为IEquitable。
Note2:感谢dasblinkenlight自己在解决方案中尝试了这段代码,我发现这很可能是一个配置问题,而不是编码问题。我现在认为这个特定的问题已经解决了,但是我还没有确定我的配置问题。
Note3:问题的实际原因是一个通过访问器加载dll的NUnit测试模块。更改测试过程是必需的,但是现在使用IEquatable<V<T>>解决任何问题。
问题解决了。
发布于 2013-02-09 11:41:21
您的泛型类没有什么问题。要作为泛型参数T传递的类有问题。也就是说,SomeClass,您在V<SomeClass>中传递的类并不实现IEquitable<SomeClass>。
您的V<T>类要求T是IEquitable<T>的实现。您需要它来使用Value[i].Equals(other.Value[i])表达式逐个检查数组的元素相等性。如果使用任何类作为V<T>的泛型参数对自己不公平,编译器就会抱怨。
https://stackoverflow.com/questions/14787697
复制相似问题