2012-02-15 31 views
0

我试图设置一个构造函数中的一个属性,当任何小于它的值输入时,它将存储最小值7.50m。属性已经声明,我只是需要这方面的帮助if语句,一切编译,但是当进入< 7.5的值,它不工作...如果声明在C#中设置最低工资

public decimal PayRate 
{ 
    get 
    { 
     return payRate; 
    } 

    set 
    { 
     if (value <= 7.50m) 
      payRate = 7.50m; 
     else 
      payRate = value; 
    } 
} 

编辑:下面是进入代码值... 编辑2:下面的命名空间声明的代码,我不能改变任何东西,但添加一个属性。它没有被格式化。

static void Main(string[] args) 
    { 
     Employee e1 = new Employee("Chevy", "Jack", 'A', "987654321", 1.20m); } 

而且这个命名空间中的所有东西都被定义了。

public Employee(string lName, string fName, char mi, string ss, decimal pay) 
    { 
     firstName = fName; 
     lastName = lName; 
     MiddleInitial = mi; 
     SSN = ss; 
     payRate = pay; 
    } 
+2

什么'不work'手段? – zerkms 2012-02-15 03:59:31

+0

看起来它对我来说工作得很好。它在什么情况下失败? – 2012-02-15 04:01:31

+0

什么是payRate?它在哪里定义? – 2012-02-15 04:03:08

回答

2

我假设你有这样的事情。

private decimal payRate; 
    public decimal PayRate 
    { 
     get { return payRate; } 
     // i avoid use of "if else" in situations like these 
     set { payRate = (value <= 7.50m) ? 7.50m : value; } 
    } 

这应该正常工作,当你分配

PayRate=6.5m // or any value less than 7.5 

但如果分配

payRate=6.5m // this won't work because you are assigning value directly to private property. 

这是行不通的,因为你是直接对私有财产分配值。

编辑:你set访问不会得到,如果你设置

payRate=pay 

在构造函数中调用。您可以从构造函数参数中移除支付,并在创建Employee实例后再进行设置。

// create employee 
    Employee e1 = new Employee("Ford", "Joe", 'S', "123456789"); 

    // set the pay here 
    e.PayRate=1.75m; // this will invoke the set accessor and set value to 7.5m 
1

您的二传手破损的设计。设置者应该将属性设置为指定的值,或者抛出异常。

你应该写:

public static readonly Decimal MinimumWage = 7.50m; 

... 

set 
{ 
    if(value<=MinimumWage) 
     throw new ArgumentException(string.Format("Wage {0} must be at least the minimum wage of {1}",value,MinimumWage)); 
    payRate = value; 
}