Могу ли я определить метод, принимающий ЛИБО Func ИЛИ Выражение >?

Если я попытаюсь написать две перегрузки метода, один принимает параметр 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 )? Я понимаю, что это не было бы такой большой проблемой; Мне просто интересно, есть ли другой способ.

7
задан Dan Tao 21 October 2010 в 20:02
поделиться