Ho un po 'di codice con la seguente logica:Cosa fare quando si utilizza Contract.Assert (true) e il metodo deve restituire qualcosa?
//pseudo-code
foreach (element in elementList) {
if (element is whatever)
return element;
}
}
In teoria, c'è sempre un elemento che è qualsiasi cosa, quindi questo metodo non dovrebbe porre problemi. In ogni caso, ho messo un'affermazione sulla fine del metodo giusto per essere sicuri:
//pseudo-code
foreach (element in elementList) {
if (element is whatever)
return element;
}
}
Contract.Assert(false, "Invalid state!");
Il problema è che, come questo metodo deve restituire qualcosa, e il compilatore non capire che l'affermazione interromperà l'esecuzione del programma. Prima di usare Contratti, in questo tipo di situazioni, usavo lanciare un'eccezione, che risolveva il problema. Come gestiresti questo con Contract.Assert()? Restituisce null o default (element_type) dopo la chiamata Contract.Assert() sapendo che non verrà mai chiamata e chiudendo il compilatore? O c'è qualche altro modo più elegante per farlo?
Grazie
Non dire 'Contract.Assert (false, "stato non valido!");'? –
Sì, l'ho fatto. : facep: –