Генератор случайных чисел должен быть инициализирован только один раз, так как он использовал такты ЦП во время инициализации для начального числа случайных чисел. Лучше всего включать его в частное статическое поле.
Измените код на
public class StarWarsFigures
{
// Define one instance of the random number generator
static readonly Random rng = new Random();
...
}
Теперь, когда он используется внутри сеттера, это плохой дизайн, поскольку цельсеттер устанавливает свойство в указанное значение. Если вы хотите изначально установить для свойства случайное число, сделайте это в конструкторе.
public StarWarsFigures(string character)
{
this.Character = character;
this.Bounty = rng.Next(1, 10);
}
public int Bounty
{
get { return bounty; }
set { bounty = value; }
}
Наконец, есть некоторые проблемы со строкой символов. Я предполагаю, что вы хотите сохранить его только в верхнем регистре, так как геттер конвертирует его как таковой. Лучше сделать преобразование один раз в сеттере вместо этого. Кроме того, при сравнении строк всегда используйте .Equals()
вместо ==
, поскольку они означают разные значения для строк. Наконец, вам необходимо преобразовать заданное значение в верхний регистр также перед сравнением или использовать параметр StringComparison.OrdinalIgnoreCase
.
public string Character
{
get { return character; }
set
{
if (value.Equals("Han Solo", StringComparison.OrdinalIgnoreCase)
|| value.Equals("Leia", StringComparison.OrdinalIgnoreCase))
{
character = value.ToUpper();
}
else
{
character = "INCORRECT CHARACTER!!!!";
}
}
}
PS. Вы можете исправить опечатки. Character
является правильным написанием, а не Charactor
.