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