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