The question was changed significantly, so my original answer is a bit off by now.
However, the problem is essentially the same. I.e. there could be any number of matching delegate declarations for F
and since there is no implicit conversion between two identical delegate declarations the type of F
cannot be converted to Func<bool>
.
Likewise, if you declare
private delegate void X();
private delegate void Y();
private static void Foo() {}
You cannot do
X x = Foo;
Y y = x;
Original answer:
It doesn't work because method groups cannot be assigned to an implicitly typed variable.
var test = Func;
doesn't work either.
The reason being that there could be any number of delegate types for Func
. E.g. Func
matches both of these declarations (in addition to Action
)
private delegate void X();
private delegate void Y();
To use implicitly typed variables with method groups, you need to remove the ambiguity by casting.
See archil's answer for a concrete example of one way to fix this. That is, he shows what the corrected code might look like [assuming the delegate you desire to match is Action
].
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…