Если заявление, чтобы установить минимальную заработную плату в C # - PullRequest
0 голосов
/ 15 февраля 2012

Я пытаюсь установить свойство в конструкторе, которое будет хранить минимальное значение 7,50 м, когда любое значение меньше, чем оно введено. Атрибуты уже объявлены, мне просто нужна помощь с этим оператором if, все компилируется, но когда вводится значение <7.5, это не работает ... </p>

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 ]

2 голосов
/ 15 февраля 2012

Я предполагаю, что у вас что-то вроде этого.

    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

внутри конструктора.Вы можете удалить 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 голос
/ 20 февраля 2012

Ваш сеттер сломан по замыслу.Установщик должен либо установить для свойства присвоенное значение, либо выдать исключение.

Вы должны написать:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...