70
    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);
    }
4

4 回答 4

133

我也遇到过这种情况,我发现的唯一解决方法是使用可空值。

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

其他可能的语法是:

loggerText.ForeColor = c.GetValueOrDefault(Color.Black);
于 2010-05-10T16:29:07.863 回答
9

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

public void log(String msg, Color? c = null) { ... }
于 2010-05-10T16:29:50.957 回答
3

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

于 2010-05-10T16:35:15.527 回答
1

使用建议:

public GraphicsLine(Point startPoint, Point endPoint, Color? color = null, double width = 1.0)
{
    StartPoint = startPoint;
    EndPoint = endPoint;
    Color = color ?? Colors.Black;
    Width = width;
}
于 2013-02-19T15:43:52.497 回答