这是一个示例函数:
public void DrawSquare(int x, int y, Color boxColor = Color.Black)
{
//Code to draw the square goes here
}
编译器不断给我错误:“boxColor”的默认参数值必须是编译时常量
我试过了
Color.Black,
Color.FromKnownColor(KnownColor.Black), and
Color.FromArgb(0, 0, 0)
如何让 Color.Black 成为默认颜色?另外,我不想使用字符串 Black
来指定它(我知道这会起作用)。我想要 Color.Black
值。
最佳答案
这样做:
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
等原语,其中 ==
清楚地说明/传达了数学相等性比较。
或者,使用可空值(归功于 Brian Ball 的回答):
void foo(... Color? boxColor = null)
{
if(boxColor == null) boxColor = Color.Black;
// ...
}
关于c# - 我可以在 C# 4.0 中指定默认的 Color 参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4454336/