私に似たさまざまな質問を読みましたが、どれも私の問題に対処していないようです。
私はこのようなタイプを持っています:
class MyObject<T> : IEquatable<MyObject<T>> { // no generic constraints
  private readonly string otherProp;
  private readonly T value;
  public MyObject(string otherProp, T value)
  {
    this.otherProp = otherProp;
    this.value = value;
  }
  public string OtherProp { get { return this.otherProp; } }
  public T Value { get { return this.value; } }
  // ...
  public bool Equals(MyObject<T> other)
  {
    if (other == null)
    {
       return false;
    }
    return this.OtherProp.Equals(other.OtherProp) && this.Value.Equals(other.Value);
  }
}
等式が正しく機能するときTはスカラーですが、等号のようなものを定義すると失敗します。MyObject<int>MyObject<IEnumerable<int>>
その理由は、 T のときIEnumerable<T>に を呼び出す必要があるからthis.Value.SequenceEqual(other.Value)です。
この違いを処理Equals(MyObject<T>)すると、型チェックとリフレクションの LOC が多すぎます (私にとっては、SOLID/SRP の違反につながります)。
MSDN ガイドラインでこの特定のケースを見つけることができなかったので、誰かがすでにこの問題に直面している場合は、この知識が共有できれば素晴らしいことです。
編集:代替
KISSに、私は似たようなことをしたいと思っています:
class MyObject<T> : IEquatable<MyObject<T>> {
  private readonly IEnumerable<T> value;
  // remainder omitted
}
このようにして、の実装はEqual非常に簡単になります。値が 1 つだけ必要な場合は、1 つのアイテムのコレクションがあります。明らかに、 T は列挙可能ではありません (ただし、データ構造はプライベートであるため、問題はありません)。