Может ли параметр enum быть необязательным в C#?

Я использовал этот полезный пост, чтобы узнать, как передать список значений Enum в качестве параметра.

Теперь я хотел бы знать, могу ли я сделать этот параметр необязательным?

Пример:

   public enum EnumColors
    {
        [Flags]
        Red = 1,
        Green = 2,
        Blue = 4,
        Black = 8
    }

Я хочу вызвать мою функцию, которая получает параметр Enum, следующим образом:

DoSomethingWithColors(EnumColors.Red | EnumColors.Blue)

ИЛИ ЖЕ

DoSomethingWithColors()

Моя функция должна выглядеть как что?

public void DoSomethingWithColors(EnumColors someColors = ??)
 {
  ...
  }

4 ответа

Решение

Да, это может быть необязательным.

[Flags]
public enum Flags
{
    F1 = 1,
    F2 = 2
}

public  void Func(Flags f = (Flags.F1 | Flags.F2)) {
    // body
}

Затем вы можете вызвать вашу функцию с параметром или без него. Если вы позвоните без параметров, вы получите (Flags.F1 | Flags.F2) в качестве значения по умолчанию, переданного f параметр

Если вы не хотите иметь значение по умолчанию, но параметр все еще необязательный, вы можете сделать

public  void Func(Flags? f = null) {
    if (f.HasValue) {

    }
}

enum является типом значения, так что вы можете использовать тип значения NULL EnumColors?...

void DoSomethingWithColors(EnumColors? colors = null)
{
    if (colors != null) { Console.WriteLine(colors.Value); }
}

а затем установите значение по умолчанию EnumColors? в null

Другое решение состоит в том, чтобы установить EnumColors до неиспользованного значения...

void DoSomethingWithColors(EnumColors colors = (EnumColors)int.MinValue)
{
    if (colors != (EnumColors)int.MinValue) { Console.WriteLine(colors); }
}

Следующий код является абсолютно действительным:

void colorfunc(EnumColors color = EnumColors.Black)
{
    //whatever        
}

вызвать это можно так:

colorfunc();
colorfunc(EnumColors.Blue);

Вы можете перегрузить свою функцию, поэтому напишите две функции:

void DoSomethingWithColors(EnumColors colors)
{
    //DoWork
}

void DoSomethingWithColors()
{
    //Do another Work, or call DoSomethingWithColors(DefaultEnum)
}
Другие вопросы по тегам