枚举参数在 C# 中可以是可选的吗?
Can enum parameter be optional in c#?
我已经使用 this helpful post 学习如何将枚举值列表作为参数传递。
现在我想知道是否可以将此参数设为可选?
示例:
public enum EnumColors
{
[Flags]
Red = 1,
Green = 2,
Blue = 4,
Black = 8
}
我想像这样调用接收 Enum 参数的函数:
DoSomethingWithColors(EnumColors.Red | EnumColors.Blue)
或
DoSomethingWithColors()
我的函数应该看起来像什么?
public void DoSomethingWithColors(EnumColors someColors = ??)
{
...
}
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); }
}
是的,它可以是可选的。
[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) {
}
}
你可以重载你的函数,所以写两个函数:
void DoSomethingWithColors(EnumColors colors)
{
//DoWork
}
void DoSomethingWithColors()
{
//Do another Work, or call DoSomethingWithColors(DefaultEnum)
}
以下代码完全有效:
void colorfunc(EnumColors color = EnumColors.Black)
{
//whatever
}
可以这样调用:
colorfunc();
colorfunc(EnumColors.Blue);
我已经使用 this helpful post 学习如何将枚举值列表作为参数传递。
现在我想知道是否可以将此参数设为可选?
示例:
public enum EnumColors
{
[Flags]
Red = 1,
Green = 2,
Blue = 4,
Black = 8
}
我想像这样调用接收 Enum 参数的函数:
DoSomethingWithColors(EnumColors.Red | EnumColors.Blue)
或
DoSomethingWithColors()
我的函数应该看起来像什么?
public void DoSomethingWithColors(EnumColors someColors = ??)
{
...
}
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); }
}
是的,它可以是可选的。
[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) {
}
}
你可以重载你的函数,所以写两个函数:
void DoSomethingWithColors(EnumColors colors)
{
//DoWork
}
void DoSomethingWithColors()
{
//Do another Work, or call DoSomethingWithColors(DefaultEnum)
}
以下代码完全有效:
void colorfunc(EnumColors color = EnumColors.Black)
{
//whatever
}
可以这样调用:
colorfunc();
colorfunc(EnumColors.Blue);