public struct KeyValuePair { public KeyValuePair (X x, Y y) { } } public interface IComparer { int Compare (T x); } public class KeyValuePairComparer : IComparer> { public int Compare (KeyValuePair a) { return 0; } } public class TreeBag { IComparer comparer; T item; public TreeBag (IComparer comparer, T item) { this.comparer = comparer; this.item = item; } public int Find () { return comparer.Compare (item); } } public class X { public static void Main () { KeyValuePair pair = new KeyValuePair (3, 89); KeyValuePairComparer comparer = new KeyValuePairComparer (); TreeBag> bag = new TreeBag> (comparer, pair); bag.Find (); } }