문제

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