你好
我有如下方法:
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;
}
这是否意味着合同。要求不证明表达?如果是这样,有什么用?:?
更新
好吧,我发现了一个非常奇怪的代码契约行为。我把这个方法移到了另一个项目上,并且成功了。不再需要未经证实的警告。然后我回到原来的项目,在消息窗口中,我找到了这一行:
消息1 CodeContracts:建议先决条件:Contract.Requires(密码!=空);
双击此项时,将导航到PasswordCredential的PinCode属性。
[DataMember]
public string PinCode
{
get { return _PinCode; }
set { _PinCode = value == null ? null : value.Trim(); } <-- I'm navigated here
}
但是,当我单击警告项时,会导航到encoder.GetBytes(密码)行。
我不明白怎么了。是虫子吗?