Sono sorpreso che nessuno l'abbia menzionato (quindi spero di non aver letto male la domanda) - ma entrambi fanno schifo!
L'alternativa migliore sarebbe utilizzare le uscite anticipate (inserendo una dichiarazione di ritorno all'inizio del codice se nessun altro codice dovrebbe essere eseguito). Ciò presuppone che il tuo codice sia relativamente ben refactorato e che ogni metodo abbia uno scopo sintetico.
A quel punto dovresti fare qualcosa come:
if ((byteArrayVariable == null) || (byteArrayVariable.Length != 0)) {
return; // nothing to be done, leaving
}
// Conditions met, do something
Potrebbe sembrare molto simile alla validazione - ed è esattamente quello che è. Convalida che le condizioni sono state soddisfatte per il metodo di fare la cosa è - entrambe le opzioni che hai offerto hanno nascosto la logica effettiva all'interno dei controlli pre-condizione.
Se il tuo codice contiene molti spaghetti (metodi moooolti, molti if nidificati con logica sparsa tra loro, ecc.) dovresti concentrarti sul problema più grande di ottenere il tuo codice in forma prima dei più piccoli problemi stilistici. A seconda del tuo ambiente e della gravità del pasticcio, ci sono alcuni ottimi strumenti per aiutarti (ad es. Visual Studio ha una funzione di refactoring "Metodo di estrazione").
Come ricorda Jim, c'è ancora spazio per il dibattito su come per strutturare l'uscita anticipata. L'alternativa a ciò che è sopra sarebbe:
if (byteArrayVariable == null)
return; // nothing to be done, leaving
if (byteArrayVariable.Length != 0)
return;
// Conditions met, do something