Может ли параметр 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)
}