我想要一个通用类来实现 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;
}
}
这就是问题所在。当我编译上述通用类时,我收到以下消息。
GenericArguments[0], 'T' on 'Myspace.Generic.V`1[T]' 违反了类型参数 'T' 的约束。
我的推理在哪里犯了错误,或者我的泛型类有什么问题?
注意:当我IEquatable<V<T>>
省略泛型类和public bool Equals(V<T> other)
完整的代码时,泛型类将编译并可用。编译器检测 IEquitable 除外。
public class V<T> where T : IEquatable<T>
{
上面的代码有效,但实例V<T>
不再被识别为 IEquitable
注意 2:感谢 dasblinkenlight 在自己的解决方案中尝试此代码,我发现这很可能是配置问题,而不是编码问题。我现在认为这个特定问题已得到解答,但我尚未确定我的配置问题。
注意3:问题的实际原因是一个NUnit测试模块通过访问器加载了dll。需要更改测试程序,但IEquatable<V<T>>
现在使用没有任何问题。
问题解决了。