using System; public interface ISequenced { bool Equals (ISequenced that); } public class SequencedHasher where S : ISequenced { public bool Equals (S i1, S i2) { return i1 == null ? i2 == null : i1.Equals (i2); } } public class Sequenced : ISequenced { public bool Equals (ISequenced that) { return false; } } class X { public static void Main () { Sequenced s = new Sequenced (); SequencedHasher,int> hasher = new SequencedHasher,int> (); hasher.Equals (s, s); } }