Mik*_*ebb 19 c# parameters colors default-value c#-4.0
这是一个示例函数:
public void DrawSquare(int x, int y, Color boxColor = Color.Black)
{
//Code to draw the square goes here
}
Run Code Online (Sandbox Code Playgroud)
编译器不断给我错误: Default parameter value for 'boxColor'must be a compile-time constant
我试过了
Color.Black,
Color.FromKnownColor(KnownColor.Black), and
Color.FromArgb(0, 0, 0)
Run Code Online (Sandbox Code Playgroud)
如何使Color.Black成为默认颜色?另外,我不想使用字符串Black来指定它(我知道它可以工作).我想要的Color.Black价值.
Mr.*_* TA 15
做这个:
void foo(... Color boxColor = default(Color))
{
if(object.Equals(boxColor, default(Color))) boxColor = Color.Black;
// ...
}
Run Code Online (Sandbox Code Playgroud)
快速搁置:我喜欢使用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;
// ...
}
Run Code Online (Sandbox Code Playgroud)
Geo*_*ton 12
保持简单有什么问题?
public void DrawSquare(int x, int y)
{
DrawSquare(x,y,Color.Black);
}
public void DrawSquare(int x, int y, Color color)
{
// Do your thing.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11302 次 |
| 最近记录: |