using System; public class Test { public static Comparison WrapComparison(Comparison comparison) { return delegate(U x, U y) { return comparison(x, y); }; } public delegate int MyComparison (V x, V y); public static MyComparison WrapMyComparison(MyComparison myComparison) { return delegate(W x, W y) { return myComparison(x, y); }; } } public class Foo { static int compare (int x, int y) { return x - y; } static int compare (string x, string y) { return string.Compare (x, y); } static void test (int i) { if (i != 0) throw new Exception (""+i); } public static void Main () { Comparison ci = Test.WrapComparison (compare); Comparison cs = Test.WrapComparison (compare); Test.MyComparison mci = Test.WrapMyComparison (compare); Test.MyComparison mcs = Test.WrapMyComparison (compare); test (ci (1,1)); test (cs ("h", "h")); test (mci (2,2)); test (mcs ("g", "g")); } }