2015-01-08 15 views
6

Qualcuno può spiegare come gestire la gestione delle eccezioni in lambda expression. So che nel metodo anonimo possiamo utilizzare try catch method come,Gestione delle eccezioni in lambda Espressione

Employee emp = listemp.Find(delegate(Employee employee) 
{ 
    try 
    { 
    if (number == 5) 
     throw new InvalidCastException(); 
    } 

    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
    return employee.id == 101; 
} 

Convertendo sopra codice in Lambda Expression abbiamo,

Employee e1 = listemp.Find(x => x.id == 101); 

La mia domanda è: possiamo implementare provare cattura con questa espressione?

risposta

10

Sicuro. espressioni lambda sono solo metodi, in modo da poter scrivere:

listemp.Find(x => 
{ 
    bool found = false; 
    try 
    { 
     found = x.id == 101; 
    } 
    catch (Exception ex) { } 
    return found; 
}); 

Nota: Non ho detto che era ok per intercettare le eccezioni del genere, questo è solo a scopo di esempio.

Ovviamente, una volta che i metodi anonimi sono questo coinvolti, probabilmente dovresti considerare solo l'utilizzo di un metodo adeguato comunque.

+4

Anche se si inizia a scrivere blocchi try/catch completi in un metodo anonimo, è necessario iniziare a chiedersi se è forse il momento di dichiarare uno "corretto". –

+0

@AntP Nessuna domanda al riguardo, modificherò per includerlo. – BradleyDotNET