Sto usando .NET4.5
e C#
ho immaginato la creazione di metodo di estensione che mi avrebbe permesso di passare una proprietà dell'oggetto e se Id di quell'oggetto è 0 allora return null
altrimenti restituisce quel valore della proprietà.metodo di estensione che accetta Espressione <Func<T>> espressione come parametro
Non ho potuto fare nessun problema con la riflessione, quindi considera più questo esercizio di allenamento e non io che sto cercando di risolvere il problema.
metodo di estensione Attualmente è seduto in static
classe guardando come questo:
public static object GetNullIfNotSet(this WillAnswer answer, Expression<Func<WillAnswer>> expression)
{
if (answer.Id == 0) return null;
return expression.Compile()();
}
Il modo in cui voglio essere in grado di usarlo è seguito (risposta è di tipo WillAnswer
):
var emptyIfNewObject = answer.GetNullIfNotSet(o => o.HasBusinessAssets)
Tuttavia mi dà errore di compilazione:
Error 1 Delegate 'System.Func' does not take 1 arguments C:\hg\Website\Areas\Wills\ViewModel\Answers.cs 38 59 Website
Il che mi fa arrabbiare perché non penso di passare alcun argomento (vero?). Potrebbe piacere a qualcuno più intelligente di me stesso spiegare quale delle mie aspettative è sbagliata.
Nel caso in cui non fossi chiaro ripeterò. Quello che voglio è poter chiamare var emptyIfNewObject = answer.GetNullIfNotSet(o => o.HasBusinessAssets)
e ottenere null
se Id
di answer
è 0
.
Come altri ho sottolineato, non hai bisogno di un'espressione. La fonte del tuo errore è il fatto che tu abbia definito il tuo func sbagliato, comunque.Probabilmente vuoi qualcosa di simile a Func
chiamalo in questo modo: 'answer.GetNullIfNotSet (() => (((Func) (() => answer.HasBusinessAssets))()));' Che casino! torna alla risposta di haim770 :-) –
Se hai accesso all'oggetto di cui stai accedendo alla proprietà quando chiami il metodo, che fai come un'estensione sull'oggetto stesso, allora perché non passare semplicemente la proprietà invece di un 'Func'? – user2697817