Хотя это не невозможно, это особенно сложно. Это потребует ходьбы от дерева выражений и выполнения некоторой потенциально сложной логики. Например, что бы вы хотели увидеть, если я передал в следующем выражении?
Func<bool, object> expr = switch => switch ? 1 : "False";
Этот метод мог либо возвратить int
, либо string
.
Теперь вы можете добиться большего прогресса, разгрузив часть этой логики в компиляторе. Вы можете изменить свой параметр метода с Func<T, object>
на Func<T, TReturn>
и использовать typeof(TReturn)
в этом методе, чтобы определить, что компилятор решил использовать тип возвращаемого выражения.
Конечно, в случае мой пример, вы все равно будете работать против object
. Но ваш пример из x => x.IntegerProperty.ToString()
даст string
, и это то, что вы ищете.