Since there may be a Find that matches a different method than your run-time search, as soon as you start dynamic, everything is dynamic, including deciding which method is suitable, since only something is dynamic in the expression, the whole expression is dynamic .
For example, there may be another method, for example
public static T Find<T>(sometype value) { return default T; }
This would be a better match at runtime if the dynamics were of the type sometype, therefore, if the compiler does not know which dynamics cannot deduce the type of the return value, since this type can return a method that matches the best AT RUNTIME.
So, the compiler says that it returns dynamic, because it is best, your method returns something else, but the compiler does not yet know whether this method will be called.
source share