我使用this helpful post来学习如何将枚举值列表作为参数传递。
现在我想知道我是否可以将此参数设为可选项?
示例:
public enum EnumColors
{
[Flags]
Red = 1,
Green = 2,
Blue = 4,
Black = 8
}
我想调用我的函数来接收Enum param:
DoSomethingWithColors(EnumColors.Red | EnumColors.Blue)
OR
DoSomethingWithColors()
我的功能应该是什么样的?
public void DoSomethingWithColors(EnumColors someColors = ??)
{
...
}
答案 0 :(得分:9)
是的,它可以是可选的。
[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) {
}
}
答案 1 :(得分:5)
enum
是值类型,因此您可以使用可为空的值类型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); }
}
答案 2 :(得分:2)
以下代码完全有效:
void colorfunc(EnumColors color = EnumColors.Black)
{
//whatever
}
调用它可以这样做:
colorfunc();
colorfunc(EnumColors.Blue);
答案 3 :(得分:-1)
你可以重载你的功能,所以写两个函数:
void DoSomethingWithColors(EnumColors colors)
{
//DoWork
}
void DoSomethingWithColors()
{
//Do another Work, or call DoSomethingWithColors(DefaultEnum)
}