Mi sono imbattuto in una situazione in cui ho bisogno di una certa conoscenza.Azione uguale a Func <TResult>?
Di seguito si riporta il codice:
// A function to match the delegate
public static int DoSomething()
{
Console.WriteLine("i am called");
return 1;
}
// Usage
Action action =() => DoSomething();
Func<int> func =() => DoSomething();
action();
func();
mia comprensione di Action
usato per essere che dovrebbe corrispondere a un delegato che accetta nessun parametro e non restituisce nulla.
E per Func<int>
che deve corrispondere a un delegato che non accetta parametri e restituisce un int
.
DoSomething
metodo restituisce un numero intero, quindi la mia domanda: () => DoSomething()
è un delegato che restituisce un int
. Func
funziona come previsto, ma non lo è Action
. Perché? Cosa non riesco a capire qui?
Il codice viene compilato e viene eseguito correttamente, entrambi in uscita i am called
. Quello che voglio sapere è che perché Action action =() => DoSomething();
non è un errore di compilazione?
* >> ma l'azione non *: come funziona esattamente? –
la riga di codice 'Azione
@singsuyash il compilatore C# è abbastanza intelligente da capire che '(x) => DoSomething (x)' significa cose diverse a seconda del contesto. Quando lo si usa per assegnare una variabile 'Action', genera un' Action', non un 'Func' e ignora il risultato di ritorno di' DoSomething (x) '. –