这是一个示例函数:
public void DrawSquare(int x, int y, Color boxColor = Color.Black)
{
//Code to draw the square goes here
}
编译器不断给我错误:Default parameter value for 'boxColor'must be a compile-time constant
我试过了
Color.Black,
Color.FromKnownColor(KnownColor.Black), and
Color.FromArgb(0, 0, 0)
如何将Color.Black设为默认颜色?另外,我不想使用字符串Black
来指定它(我知道它可以工作)。我想要Color.Black
值。
答案 0 :(得分:14)
这样做:
void foo(... Color boxColor = default(Color))
{
if(object.Equals(boxColor, default(Color))) boxColor = Color.Black;
// ...
}
快速搁置:我喜欢使用object.Equals
静态方法,因为它是编写相等比较的一致方法。使用string
等引用类型,str.Equals("abc")
可以抛出NRE,而string.Equals(str, "abc"[,StringComparison.___])
则不会。 Color
是一个值类型,因此永远不会为null,但最好是在代码样式中保持一致,尤其是零额外成本。显然,这不适用于int
甚至DateTime
等基元,其中==
清楚地表明/传达数学相等比较。
或者,对于nullables(感谢Brian Ball的回答):
void foo(... Color? boxColor = null)
{
if(boxColor == null) boxColor = Color.Black;
// ...
}
答案 1 :(得分:13)
Color.Black
是静态的,不是常数,所以不,你不能这样做。
要使用默认值,可以使参数为nullable(Color?
),如果为null,则将其设置为Black。
答案 2 :(得分:11)
保持简单有什么不对?
public void DrawSquare(int x, int y)
{
DrawSquare(x,y,Color.Black);
}
public void DrawSquare(int x, int y, Color color)
{
// Do your thing.
}