Лямбда-преобразования с неясным типом возврата и разрешением перегрузки [дубликаты]

This question already has an answer here:

Peculiar overload resolution with while (true) 1 answer

Если у меня есть лямбда, такая как() => { throw new Exception(); }, неясно, имеет ли он тип возвращаемого значения или нет. Из-за этого, это может быть (неявно) преобразовано в обаAction а такжеFunc<object> (или любой другойFunc<T>). Это потому, что в соответствии с & 6.5;Anonymous function conversions спецификации C # 4:

[A] delegate type D is compatible with an anonymous function F provided:

If D has a void return type and the body of F is a statement block, when […] the body of F is a valid statement block in which no return statement specifies an expression.

If D has a non-void return type and the body of F is a statement block, when […] the body of F is a valid statement block with a non-reachable end point in which each return statement specifies an expression that is implicitly convertible to the return type of D.

Но если у меня есть две перегрузки метода, где один имеет параметр типаAction и другиеFunc<object>и я передаю лямбду сверху,Func<object> перегрузка используется. Зачем? Какая часть спецификации говорит, чтоFunc<object> лучше, чемAction в этом случае?

Я посмотрел на & # xA7; 7.5.3.2Better function member, но это не объясняет этого.

Ответы на вопрос(1)

Ваш ответ на вопрос