Ответ 1
В С# нет такого оператора, встроенного в С#.
Пока я выбираю один из других ответов (тот, который использует Math.Max
, возможно, более понятен для опубликованного примера), здесь здесь просто показан другой метод. Стыдно, что для вычисления требуется явно типизированная переменная.
Func<int,int> computation = (x) => x > 5 ? x : 5;
var item = computation(aclass.amethod());
И в строке, которая просто уродлива на С#.
var item = ((Func<int,int>)((x) => x > 5 ? x : 5))(aclass.amethod());
Конечно, оба из них действительно сводятся к следующему:
var item = DoComputation(aclass.amethod());
И используйте тот факт, что С# не использует pass-by-name: -)
Или, возможно, метод расширения:
static class Ext {
public static TO Apply<TI,TO> (this TI obj, Func<TI,TO> fn) {
return fn(obj);
}
}
// note C# now lets us get away with no explicit Func<...> type
var item = Ext.Apply(aclass.amethod(), x => x > 5 ? x : 5);
// or as extension method -- imagine computation is as it was in the
// first example, or a compatible method group
var item = aclass.amethod().Apply(computation);
Счастливое кодирование.