2013-09-16 34 views
5

vedo PRISM dichiarando la seguente costruttore, e non capisco che cosa è che "o" essere utilizzato con la funzione lambda che serve come secondo parametro, quando il costruttore di base si chiama:Lambda Funzione Con sconosciuta Parametro

public DelegateCommand(Action<T> executeMethod) 
    : this(executeMethod, (o)=>true) 
{    
} 

Apprezzerei una spiegazione.

+0

è solo un parametro di input a un predicato che non viene utilizzato - in questo caso il predicato restituisce sempre vero - ho il sospetto che sia un default nel caso in cui nessun predicato è passata in – BrokenGlass

+0

questo [Tutorial]. (http://msdn.microsoft.com/en-us/library/vstudio/bb882516.aspx) ti aiuterà a capire i metodi anonimi e lambda. BTW è solo un parametro di input. –

risposta

3

Si chiama questo costruttore:

DelegateCommand<T>(Action<T>, Func<T, Boolean>) 

passaggio di un lambda che restituisce sempre true come secondo parametro

11

Il costruttore, che la dichiarazione che hai postato chiamate un altro costruttore, in modo spiegarlo, dobbiamo prima guardare a firma del altro costruttore:

public DelegateCommand(Action<T> executeMethod, Func<T, bool> canExecuteMethod) 

Così il secondo parametro è un Func<T, bool>. Ciò significa che è una funzione che accetta un parametro di tipo T e restituisce un valore booleano.

Ora, se si guarda al lambda che viene utilizzato:

(o) => true 

lambda, in generale, avere la sintassi (parameter-list) => lambda-body, quindi in questo caso, l'unico parametro della lambda è una variabile o (che tipo è dedotto essere T) e la funzione restituisce un risultato costante true.

Lo scopo di questo è di eseguire fondamentalmente un comando sempre eseguibile.

Ovviamente lambda potrebbe sembrare molto più complicato, quindi quando si utilizza DelegateCommand è probabile che si utilizzino espressioni più complesse e non costanti. Per esempio:

new DelegateCommand(DoSomething, o => o.SomeProperty >= 0 && o.SomeProperty < 10 && o.SomeBoolProperty) 
+0

So quali sono le funzioni lambda e ho familiarità con PRISM e questo costruttore di base (che può essere usato ogni volta che un comando è sempre activa). Ho appena chiesto informazioni su SYNTAX. Hai risposto dicendo "in questo caso, il singolo parametro del lambda è una variabile o (il cui tipo viene inferito come T)", ma non capisco ancora perché "o", poiché il parametro singolo era già assegnato al parametro nome "executeMethod". Grazie in anticipo! – Ofer

+1

@Ofer L'intera espressione '(o) => true' è di tipo' Func 'ed è il valore per il parametro costruttore' canExecuteMethod'. 'o' è solo il nome della variabile, liberamente scelto in questo caso, che prende l'argomento della funzione del parametro' Func '. Si potrebbe anche nominarlo 'parameterToTheCanExecuteMethod' invece:' (parameterToTheCanExecuteMethod) => true'. Se rende la distrazione più chiara, puoi aggiungere anche parentesi aggiuntive: '...: this (executeMethod, ((parameterToTheCanExecuteMethod) => true))'. – poke

Problemi correlati