C#4.0:我可以使用一个颜色作为一个可选参数与默认值?

public void log(String msg, Color c = Color.black) { loggerText.ForeColor = c; loggerText.AppendText("\n" + msg); } 

这会导致错误c必须是编译时常量。 我已经阅读了这一点,大多数的例子是处理string和整数。 我已经想通了,我可以使用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); } 

我也遇到过这个问题,唯一的解决办法是使用空string。

 public void log(String msg, Color? c = null) { loggerText.ForeColor = c ?? Color.Black; loggerText.AppendText("\n" + msg); } 

其他可能的语法是:

 loggerText.ForeColor = c.GetValueOrDefault(Color.Black); 

你可以检查Color是否为Color.Empty(默认值是: default(Color) ),或者使用可为空的值并检查是否为null。

 public void log(String msg, Color? c = null) { ... } 

不要指定颜色。 提供一个“错误级别”,并在每个错误级别和一个颜色值之间进行映射。 这样0和以下可能是黑色的,然后1 =琥珀色,> 2 =红色。 无需担心默认值和/或不指定值。

使用build议:

 public GraphicsLine(Point startPoint, Point endPoint, Color? color = null, double width = 1.0) { StartPoint = startPoint; EndPoint = endPoint; Color = color ?? Colors.Black; Width = width; }