2012-02-15 9 views
0

私はコンストラクタ内にプロパティを設定しようとしていますが、それよりも小さい値が入力された場合、最小値は7.50mになります。ここで入力したコードです:属性がすでにC#で最低賃金を設定するステートメントの場合

public decimal PayRate 
{ 
    get 
    { 
     return payRate; 
    } 

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

EDITは...文は、すべてがコンパイルされたが値が< 7.5を入力したとき、それが動作しない場合、私はちょうどこれで助けを必要とし、宣言されています値... EDIT 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

+0

それは私にうまく動作するように見えます。それはどのような状況で失敗するのですか? –

+0

'payRate'とは何ですか?定義される場所はどこですか? –

答えて

2

あなたはこのようなことをしていると仮定します。

あなたが

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

を割り当てるときに正常に動作する必要があります

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 // this won't work because you are assigning value directly to private property. 

を割り当てる場合は、私有財産に直接値を代入しているので、これは動作しません。

編集:あなたは、コンストラクタ内

payRate=pay 

を設定した場合、あなたのsetアクセサが呼び出されません。 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; 
} 
関連する問題