CodeContract.Requires(param!= null)不能证明param不会为null?

时间:2010-11-27 20:27:50

标签: c# visual-studio code-contracts

您好 我有一个下面列出的方法:

    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(密码)行。 我不明白什么是错的。这是一个错误吗?

1 个答案:

答案 0 :(得分:1)

好 CC存在问题(只能在我的项目中再现:D)。我把项目发送给了CC团队并得到了非常快速的响应。他们正在调查,可能会在下一个版本中修复。 无论如何,谢谢你们的支持。