C#4.0:我可以使用Color作为可选参数并使用默认值吗?

时间:2010-05-10 16:27:07

标签: c# optional-parameters

    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 个答案:

答案 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;
}