The documentation is not clear, I agree.
The problem is that the execution types of the two combined delegates must match. This means that there are scenarios in which compile-time types are the same, but run-time types do not.
Consider, for example:
Func<string> f1 = ()=>""; Func<object> f2 = ()=>null; Func<object> f3 = f1; // legal in C
This is right at compile time; you add two delegates of the same type of compile time. But at runtime, it will fail because the runtime requires matching runtime types.
This is an unsuccessful hole in a CLR system. I hope we can fix it, but not promises.
source share