C#设置值前的数据验证

C#设置值前的数据验证,c#,validation,constructor,C#,Validation,Constructor,因此,我的挑战是: 构造函数应该调用基类构造函数来初始化帐户的名称、编号和余额。它还应该在自己的类setInterestRate中调用一个方法,该类应该设置InterestRate变量并验证速率是否为正数。如果传入的利率为负,则将利率设置为零 这对我来说似乎相当简单,但VS正在ping我的setInterestate方法(并非所有代码路径都返回值)。我肯定错过了什么,但我不知道是什么。有什么建议吗?这是我的密码: public SavingsAccount(string AccountName,

因此,我的挑战是:

构造函数应该调用基类构造函数来初始化帐户的名称、编号和余额。它还应该在自己的类setInterestRate中调用一个方法,该类应该设置InterestRate变量并验证速率是否为正数。如果传入的利率为负,则将利率设置为零

这对我来说似乎相当简单,但VS正在ping我的setInterestate方法(并非所有代码路径都返回值)。我肯定错过了什么,但我不知道是什么。有什么建议吗?这是我的密码:

public SavingsAccount(string AccountName, int AccountNumber, decimal Balance, double rate) : base(AccountName, AccountNumber, Balance)
    {
        InterestRate = rate;
    }

    public double setInterestRate(double rate)
    {
        if (rate >= 0)
        {
            InterestRate = rate;
        }
        else
        {
            InterestRate = 0;
        }
    }

使你的setInterestRate方法无效,如下所示。因为你只需要设置利率

 public void setInterestRate(double rate)
如果方法中有返回类型,则必须返回值。这就是你的错误所显示的

建议

将您的兴趣转移到下面的示例中,并在那里进行验证

double interestRate;
    public double InterestRate
    {
        get
        {
            return interestRate;
        }
        set
        {
            if (value >= 0)
            {
                interestRate = value;
            }
            else
            {
                interestRate = 0;
            }
        }
    }

也许不是最好的复制品。。。如果你不喜欢这一个,请随时查看MSDN或搜索SO-并添加更多信息,以便清楚为什么你的一个是不同的。Alexei,谢谢你的链接!我也在查看这篇文章,并将其作为书签,以备将来的挑战+1对于建议部分(找到好的副本可能是更好的方法-OP并不是第一个遇到CS0161错误的人)。请注意,你可以考虑在否定率上抛出异常,它通常比使用“随机”值而不是输入失败更好。谢谢大家的信息,这似乎已经解决了这个问题。我也将尝试在将来从MSDN中找到副本。再次感谢!