2010-11-27 8 views
2

Bonjour J'ai une méthode énuméré ci-dessous:CodeContract.Requires (param! = Null) ne prouve pas que param ne sera pas nul?

public static PasswordCredential Create(string password, string username, string pinCode = null) 
    { 
     Contract.Requires<ArgumentException>(!string.IsNullOrWhiteSpace(password), "Invalid Argument: password"); 
     Contract.Requires<ArgumentException>(!string.IsNullOrWhiteSpace(username), "Invalid Argument: username"); 

     PasswordCredential credential = new PasswordCredential(); 
     UTF8Encoding encoder = new UTF8Encoding(); 
     SHA512Managed sha512hasher = new SHA512Managed(); 


     credential.PasswordHash = sha512hasher.ComputeHash(encoder.GetBytes(password)); <-- Requires unproven: s != null 
     credential.Username = username; 
     credential.PinCode = pinCode; 

     return credential; 
    } 

Est-ce que cela signifie que Contract.Requires ne prouve pas l'expression? Si oui, à quoi cela sert-il? :?

MISE À JOUR


Ok, j'ai trouvé un comportement très bizarre des contrats de code. J'ai déplacé cette méthode à un autre projet et cela a fonctionné. Plus besoin d'avertissements non prouvés. Ensuite, je reviens au projet d'origine, et dans la fenêtre Messages, j'ai trouvé cette ligne: Message 1 CodeContracts: Pré-requis suggéré: Contract.Requires (mot de passe! = Null); Lorsque je double-clique sur cet élément, je suis redirigé vers la propriété PinCode de PasswordCredential.

 [DataMember] 
    public string PinCode 
    { 
     get { return _PinCode; } 
     set { _PinCode = value == null ? null : value.Trim(); } <-- I'm navigated here 
    } 

mais quand je clique sur l'élément d'avertissement, je naviguais à la ligne de encoder.GetBytes (mot de passe). Je ne comprends pas ce qui ne va pas. Est-ce un bug?

+0

Activez-vous la vérification de l'exécution? sans cela, ça ne peut pas marcher. –

+0

À la fois runtime et statique. Runtime est réglé sur – Davita

+0

Je ne peux pas le reproduire. J'ai copié votre code et n'ai reçu aucun avertissement. Si je commente le 'Contract.Requires' pour' password', alors je vois le même avertissement. –

Répondre

1

Ok Il y a un problème avec CC (qui ne peut être reproduit que dans mon projet: D). J'ai envoyé le projet à l'équipe de CC et j'ai eu une réponse très rapide. Ils enquêtent et probablement il sera corrigé dans la prochaine version. En tout cas merci pour votre soutien les gars.