2010-05-21 8 views
6

Sto utilizzando la libreria 3.5 per il codice Microsoft contrattiChe cosa significa "Contratto non può essere nel blocco try" significa?

public object RetrieveById(int Id) 
{  
    //stuff happens... 
    Contract.Ensures(newObject != null, "object must not be null"); 
    return newProject; 
    //No error message if I move the Contract.Ensures to here 
    //But it isn't asserting/throwing a contract exception here either   
} 

ottengo il messaggio di compilatore: "Errore 18 sezione Contratto entro blocco try nel metodo 'Controller.RetrieveById (System.Int32)'

UPDATE:

ho capito con il vostro aiuto:

  • Sposta in alto
  • Controllare contro Contract.Result

    Contract.Ensures (Contract.Result() = null, "oggetto non deve essere nulla"!);

+0

puoi pubblicare l'intero contenuto del tuo metodo. Inoltre, 'Contract.Ensures' deve essere la prima riga di codice in qualsiasi metodo. Codice dopo la dichiarazione di reso sarà irraggiungibile. Ecco perché spostarlo non fa nulla. –

risposta

6

potrei mancare qualcosa, ma ho appena guardato la documentazione relativa a questo:

http://msdn.microsoft.com/en-us/library/dd412865.aspx

dice:

Questo metodo chiamata deve essere al inizio di un metodo o proprietà, prima di qualsiasi altro codice.

Quindi basta lasciare la chiamata di Ensures nella parte superiore del metodo e non si dovrebbero avere problemi.

+3

Che terribile messaggio di errore. –

2

E 'piuttosto semplice: il contratto violazioni segnali di classe contratto di un'eccezione. Mettendolo in un blocco try sconfigge lo scopo, sei suscettibile di catturare l'eccezione.