You can assign a method to a delegate with matching type args:

Func<string, DateTime> f = DateTime.Parse;

You can assign a lambda to a delegate with covariant type args:

Func<string, object> f = s => DateTime.Parse(s);

But you can't assign a method to a delegate with covariant type args:

Func<string, object> f = DateTime.Parse; //ERROR: has the wrong return type

Why not?

有帮助吗?

解决方案

Variance does not work with value types, since they need to be JITed differently.

Your lambda expression variant does not involve variance; instead, it compiles to a lambda expression with an implicit boxing conversion from DateTime to object.

If you use a method that returns a reference type, it work fine:

Func<string, object> f = string.Intern;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top