Если я попытаюсь написать две перегрузки метода, один принимает параметр Expression
, а другой принимает параметр Func
, я получу ошибку компилятора при попытке вызвать метод с лямбда-выражением, потому что две подписи создают двусмысленность. Например, следующее будет проблематично:
Method(() => "Hello"); // Is that a Func<string>,
// or is it an Expression<Func<string>>?
Я понимаю. Но мне не нравится подход, когда просто принимается Expression
, так как это заставляет вызывающий код использовать лямбда-выражение. Что, если я хочу иметь возможность принимать и группу методов?
Я задаю этот вопрос за основу, потому что я работаю над кодом, в котором я хотел бы написать что-то вроде этого:
Method(() => "Hello");
... и получить такой результат:
Executed '() => "Hello"' and got "Hello" back.
Между тем, я бы тоже хотел сделать это:
Method(ReturnHello);
... и получить такой результат:
Executed 'ReturnHello' and got "Hello" back.
Есть ли способ сделать то, что я пытаюсь сделать здесь, без использования двух разных имен методов (например, ExpressionMethod
и FuncMethod
)? Я понимаю, что это не было бы такой большой проблемой; Мне просто интересно, есть ли другой способ.