您好 我有一个下面列出的方法:
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不能证明表达式?如果是这样有什么用呢? :
更新
好的,我发现了代码合同的一种非常奇怪的行为。我将此方法移动到另一个项目,它工作。不再需要未经证实的警告。然后我回到原始项目,在Messages窗口中,我找到了这一行: 消息1 CodeContracts:建议的前提条件:Contract.Requires(密码!= null); 当我双击这个项目时,我将导航到PasswordCredential的PinCode属性。
[DataMember]
public string PinCode
{
get { return _PinCode; }
set { _PinCode = value == null ? null : value.Trim(); } <-- I'm navigated here
}
但是当我点击警告项目时,我导航到encoder.GetBytes(密码)行。 我不明白什么是错的。这是一个错误吗?
答案 0 :(得分:1)
好 CC存在问题(只能在我的项目中再现:D)。我把项目发送给了CC团队并得到了非常快速的响应。他们正在调查,可能会在下一个版本中修复。 无论如何,谢谢你们的支持。