Ho appena provato a utilizzare Code Contracts e non vedo alcun reale vantaggio rispetto a if statement.Codice Contratto o se dichiarazione?
Considerare quanto segue.
private static void BindClassesToInterfacesByConvention(string classesEndingWith
, string interfacesEndingwith) {
Contract.Requires<ArgumentNullexception>(
string.IsNullOrWhiteSpace(classesEndingWith)
, "classesEndingWith");
Contract.Requires<ArgumentNullException>(
string.IsNullOrWhitespace(interfacesEndingWith)
, "interfacesendingWith");
...
}
trovo modo più confuso che semplicemente utilizzando un codice if statement
private static void BindClassesToInterfacesByConvention(string classesEndingWith
, string interfacesEndingwith) {
if (string.IsNullOrWhiteSpace(classesEndingWith))
throw new ArgumentNullException("classesEndingWith");
if (string.IsNullOrWhitespace(interfacesEndingWith))
throw new ArgumentNullException("interfacesendingWith");
...
}
Contratti si suppone di avvertirmi in fase di compilazione che un contratto viene violato. Quindi, mi aspettavo di ricevere un errore o un avvertimento quando ho scritto quanto segue.
BindClassesToInterfacesByConvention(null, null);
E non è successo niente, tutto è stato compilato correttamente e non è apparso né un errore né un messaggio di avviso.
In questo scenario, ritengo sia preferibile continuare con lo it statement
. O forse era un uso ingiusto di Code Contracts
?
Ci sono più vantaggi per i Contratti di codice che solo la sintassi. In realtà sono elencati in primo piano nella sezione [Documenti sui contratti di licenza] (http://msdn.microsoft.com/en-us/library/dd264808 (v = vs.110) .aspx). L'analisi statica è un affare particolarmente importante e molto difficile da ottenere analizzando le dichiarazioni di "se". –
"avvertimi al momento della compilazione" ... quello era anche il mio equivoco; ma si è scoperto che è effettivamente un programma separato (Vs addon) che analizza il tuo codice e richiede un po 'di tempo per farlo. –