Как предотвратить, чтобы параметр по умолчанию перезаписывал назначенное значение? - PullRequest
1 голос
/ 05 июня 2019

Вот мой код: метод для изменения частей ПК.

internal void ModifyPC(double CPU_Clockspeed = 0, int RAM = 0, int storage = 0, int graphicsMemory = 0)
{
    this.CPU_Clockspeed = CPU_Clockspeed;
    this.RAM_capacity = RAM;
    this.storage = storage;
    this.graphicsCardCapacity = graphicsMemory;
}

Как изменить только одно значение переменной без значений по умолчанию, перезаписывающих другие?

НапримерЯ создал ПК с 4,0 ГГц процессором, 16 ГБ ОЗУ, 250 ГБ памяти и 8 ГБ GraphicsCard.Desktop PC = new Desktop(4.0, 16, 250, 8);

Если я попытаюсь, например, изменить процессор на 4,5 ГГц: PC.ModifyPC(CPU_Clockspeed: 4.5);, все остальные атрибуты будут перезаписаны на 0.

Ответы [ 2 ]

3 голосов
/ 05 июня 2019

По умолчанию все равно Nullable<> и присваивают значение только если не ноль

internal void ModifyPC(
    double? CPU_Clockspeed = null, int? RAM = null, int? storage = null, int? graphicsMemory = null)
{
    this.CPU_Clockspeed = CPU_Clockspeed.GetValueOrDefault(this.CPU_Clockspeed);
    this.RAM_capacity = RAM.GetValueOrDefault(this.RAM_capacity);
    this.storage = storage.GetValueOrDefault(this.storage);
    this.graphicsCardCapacity = graphicsMemory.GetValueOrDefault(this.graphicsCardCapacit);
}

Теперь будут установлены только параметры с переданным значением

1 голос
/ 05 июня 2019

Поскольку вы не можете иметь отрицательные значения ни для одного из этих параметров, теоретически вы можете использовать -1 вместо нуля.Затем вы можете применить следующую логику к вашей функции.

internal void ModifyPC(double CPU_Clockspeed = -1, int RAM = -1, int storage = -1, int graphicsMemory = -1)
{
   if (CPU_Clockspeed != -1) this.CPU_Clockspeed = CPU_Clockspeed;
   if (RAM != -1) this.RAM_capacity = RAM;
   if (storage != -1) this.storage = storage;
   if (graphicsMemory != -1) this.graphicsCardCapacity = graphicsMemory;
}
...