delegate int Foo<in T> (T t); public class Test { public static int Main () { string message = "Hello World!"; Foo<object> foo = (o) => o.GetHashCode (); if (Bar (foo, message) != message.GetHashCode ()) return 1; return 0; } static int Bar (Foo<string> foo, string s) { return foo(s); } }