枚举参数在c#中是可选的吗?

时间:2015-03-20 08:00:29

标签: c# enums optional-parameters

我使用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 = ??)
 {
  ...
  }

4 个答案:

答案 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)
}