gpt4 book ai didi

c# - 通用类和 IEquatable 问题

转载 作者:行者123 更新时间:2023-11-30 17:07:10 25 4
gpt4 key购买 nike

我想要一个通用类来实现 IEquatable 接口(interface)。该类具有 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]' violates the constraint of type parameter '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>>现在使用没有任何问题。

问题已解决。

最佳答案

您的泛型类没有任何问题。您作为其通用参数传递的类有问题 T .即 SomeClass , 你传入的类 V<SomeClass>不执行IEquitable<SomeClass> .

你的 V<T>类需要 T成为 IEquitable<T> 的实现.您需要它才能使用 Value[i].Equals(other.Value[i]) 检查数组的逐个元素相等性表达。如果您将任何类用作 V<T>的通用参数对自身不公平,编译器会提示。

关于c# - 通用类和 IEquatable 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14787697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com