Così ho questo nel mio C# lib:parola chiave dinamica abilita "forse" monade?
public static TOut IfNotNull<TIn, TOut>
(this TIn instance, Func<TIn, TOut> func)
{
return instance == null ? default(TOut) : func(instance);
}
Usato come:
DateTime? expiration = promo.IfNotNull(p => p.TermsAndConditions.Expiration)
.IfNotNull(e => e.Date);
tengo wracking mio cervello cercando di capire come utilizzare la parola chiave C# 4 dynamic
per consentire questa sintassi invece :
DateTime? expiration = promoOffer.TermsAndConditions.Maybe()
.Expiration.Maybe()
.Date;
ho avuto un paio di esempi che ho pensato lavorato ma hanno rotto verso il basso quando si avvia il concatenamento delle Maybe()
s.
Qualche idea?
(Sto perdendo il mio tempo? È Maybe()
una vittoria su IfNotNull()
)?
forse ho avuto l'idea sbagliata, ma non sarebbe la ?? l'operatore è utile qui? – spender
variabili dinamiche non possono vedere i metodi di estensione credo. –
Personalmente mi piace molto il 'IfNotNull()' che hai attualmente. Dato che non puoi usare 'dynamic' con i metodi di estensione, la mia sensazione è che il codice potrebbe finire per essere orrendo. –