こんにちは 私は方法が怒鳴るリストされています: CodeContract.Requires(param!= null)は、paramがnullでないことを証明しませんか?
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;
}
が、これはContract.Requires式を証明していないことを意味するのでしょうか?もしそうなら、それは何のために使われますか? :?
UPDATE
[OK]を、私は、コード契約の非常に奇妙な行動を発見しました。私はこの方法を別のプロジェクトに移しました。これ以上の証明されていない警告は必要ありません。次に、私は元のプロジェクトに戻り、メッセージウィンドウで、私はこの行を見つけました: メッセージ1 CodeContracts:推奨前提条件:Contract.Requires(password!= null); このアイテムをダブルクリックすると、PasswordCredentialのPinCodeプロパティに移動します。
[DataMember]
public string PinCode
{
get { return _PinCode; }
set { _PinCode = value == null ? null : value.Trim(); } <-- I'm navigated here
}
警告項目をクリックすると、encoder.GetBytes(パスワード)行に移動します。 何が問題なのか分かりません。バグですか?
ランタイムチェックを有効にしていますか?これがなければ、うまく動作しません。 –
実行時と静的の両方。実行時間が満杯に設定されています – Davita
私はこれを再現できません。私はあなたのコードをコピーし、警告を受け取りません。 'contract.Requires'の' password'をコメントアウトすると、同じ警告が表示されます。 –