c# - 我可以在 C# 4.0 中指定默认的 Color 参数吗?

标签 c# parameters c#-4.0 colors default-value

这是一个示例函数:

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/

相关文章:

c# - 无法计算表达式,因为 native 框架位于调用堆栈的顶部

c# - 如何删除具有一个或多个空单元格或空单元格的行?

c# - 没有为一个或多个必需参数提供值 ERROR

c++ - 有没有办法从基类函数参数中推导出模板参数?

c# - 为什么实现内部接口(interface)的方法必须是公共(public)的

c# - 将枚举的内容获取到下拉列表

c# - 在主线程上执行 Task.Run

java - 如何在java中运行带有参数的批处理文件?

jQuery;针对每个元素设置默认选项

C# MySQL 错误 “Column count doesn' t 第 1 行匹配值计数”