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]、'Myspace.Generic.V`1[T]' の '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: この問題の実際の原因は、アクセサーを介して dll をロードする NUnit テスト モジュールにあります。テスト手順の変更が必要ですがIEquatable<V<T>>
、問題なく使用できています。
問題が解決しました。