Sto lavorando all'interno di un metodo che esegue una serie di controlli di convalida e nel caso in cui uno di questi controlli fallisce chiama uno Action<string>
per eseguire un codice di rifiuto comune. Il qualcosa di set up è simile a questo:Ritorno dal metodo genitore all'interno di Azione <string>
public void ValidationMethod() {
Action<string> rejectionRoutine = (rejectionDescription) => {
// do something with the reject description
// other common code
};
if (condition != requiredValue) {
rejectionRoutine("Condition check failed");
// I currently have to put `return` here following every failed check
}
// many more checks following this
}
In questo sistema una volta che si verifica non è riuscita la convalida non ho bisogno di convalidare il resto, voglio solo per eseguire il codice comune rifiuto dentro l'azione e uscire il metodo . Attualmente per fare questo ho appena return
nella riga successiva a seguito di una chiamata a rejectionRoutine
. Mi chiedo se c'è un modo per incorporare la possibilità di restituire o terminare l'esecuzione del metodo genitore dall'interno dello Action
?
So che questo è un po 'pignolo, ma mi sento come se fosse meglio per l'estensibilità in fondo alla strada se qualcun altro ha bisogno di aggiungere ulteriori controlli di convalida (non dovranno preoccuparsi di rimandare indietro tutto il luogo) e incapsulare il comportamento comune di terminare l'esecuzione all'interno del codice che dovrebbe essere comune a questi casi.
Ahhh Servy, le grandi menti pensano allo stesso modo.Ho scritto un codice che era quasi identico a questo prima di trovare un paio di punti in cui non aveva senso. Vi sono alcuni controlli che generano eccezioni se vengono valutati quando un controllo precedente deve essere teriminato. Vale a dire. check1 è value! = null, check2 potrebbe fare qualcosa con valore assumendo che non può essere nullo se siamo arrivati fin qui –
@JesseCarter Quindi, come ho detto alla fine, dovrai usare un 'Elenco , stringa >> '. È solo un po 'più codice. –
Servy
Forse sono confuso riguardo al modo in cui verrà valutato il bool in Func? La valutazione effettiva del valore bool viene posticipata finché non viene richiamato Func? Supponevo che sarebbe stato valutato non appena è stato creato il Func –