Non esiste un operatore di questo tipo incorporato in C#.
Mentre avrei selezionare una delle altre risposte (quella che usa Math.Max
è senza dubbio più chiaro per l'esempio postato), questo è qui solo per mostrare un altro metodo. È un peccato che il calcolo richieda una variabile tipizzata esplicitamente.
Func<int,int> computation = (x) => x > 5 ? x : 5;
var item = computation(aclass.amethod());
E in linea, che è solo brutto in C#.
var item = ((Func<int,int>)((x) => x > 5 ? x : 5))(aclass.amethod());
Naturalmente sia di quanto sopra bollire veramente basso per solo:
var item = DoComputation(aclass.amethod());
e utilizzare il fatto che C# non fa uso di pass-by-name :-)
O, forse un metodo di estensione:
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);
Felice codifica.
fonte
2011-02-04 21:28:38
Intendi l'operatore * ternario *? :) – Mehrdad
Proprio per questo, quell'operatore è un operatore * coalesce *. Molto simile al 'COALESCE()' che vediamo in SQL. –
moo, è corretto, c'è una funzione .net simile per la coalesce? e preferibilmente una versione scorciatoia? –