代码之家  ›  专栏  ›  技术社区  ›  Davita

CodeContract.Requires(参数!=null)不能证明param不为null吗?

  •  2
  • Davita  · 技术社区  · 15 年前

    你好 我有如下方法:

        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(密码)行。 我不明白怎么了。是虫子吗?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Davita    15 年前

    好 啊 CC有一个问题(只能在我的项目:D中复制)。我把项目发给了CC团队,得到了很快的回复。他们正在调查,可能会在下一个版本中修复。 不管怎样,谢谢你们的支持。