public delegate TResult Func<in T, out TResult>( T arg )
http://msdn.microsoft.com/en-us/library/bb549151.aspx