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?
Activez-vous la vérification de l'exécution? sans cela, ça ne peut pas marcher. –
À la fois runtime et statique. Runtime est réglé sur – Davita
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. –