0

コンストラクターにプロパティを設定しようとしています。このプロパティは、入力された値よりも小さい値が入力されたときに最小値7.50mを格納します。属性はすでに宣言されています。このifステートメントについてサポートが必要です。すべてがコンパイルされますが、値が7.5未満と入力されると、機能しません。

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;
    }
4

2 に答える 2

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.

私有財産に直接値を割り当てているため、これは機能しません。

編集:設定した場合、設定アクセサーは呼び出されません

    payRate=pay

コンストラクターの内部。コンストラクター引数から 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
于 2012-02-15T04:20:54.523 に答える
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;
}
于 2012-02-19T21:56:31.133 に答える