public void log(String msg, Color c = Color.black)
{
loggerText.ForeColor = c;
loggerText.AppendText("\n" + msg);
}
这会导致c必须是编译时常量的错误。我已经阅读了这一点,大多数例子都是处理字符串和整数。我已经发现我可以使用colorconverter类,但我不确定它会非常有效。有没有办法将基本颜色作为可选参数传递?
public void log(String msg, String c = "Black")
{
ColorConverter conv = new ColorConverter();
Color color = (Color)conv.ConvertFromString(c);
loggerText.ForeColor = color;
loggerText.AppendText("\n" + msg);
}
答案 0 :(得分:99)
我也遇到过这种情况,我发现的唯一解决方法是使用nullables。
public void log(String msg, Color? c = null)
{
loggerText.ForeColor = c ?? Color.Black;
loggerText.AppendText("\n" + msg);
}
其他可能的语法是:
loggerText.ForeColor = c.GetValueOrDefault(Color.Black);
答案 1 :(得分:9)
您可以检查Color是否为Color.Empty(默认值为default(Color)
)或使用可为空的值并检查是否为空。
public void log(String msg, Color? c = null) { ... }
答案 2 :(得分:3)
不要指定颜色。改为提供“错误级别”,并在每个错误级别和颜色值之间进行映射。那样0和以下可以是黑色,然后1 =琥珀色,> 2 =红色。无需担心默认值和/或不指定值。
答案 3 :(得分:1)
使用建议:
public GraphicsLine(Point startPoint, Point endPoint, Color? color = null, double width = 1.0)
{
StartPoint = startPoint;
EndPoint = endPoint;
Color = color ?? Colors.Black;
Width = width;
}