Подтвердить что ты не робот

С# 4.0: Можно ли использовать цвет как необязательный параметр со значением по умолчанию?

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

    }

Это приводит к ошибке, что c должна быть константой времени компиляции. Я читал об этом немного, и большинство примеров имеют дело со строками и ints. Я понял, что могу использовать класс 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);
    }
4b9b3361

Ответ 1

Я столкнулся с этим, и единственным обходным решением, которое я нашел, является использование nullables.

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

Другой возможный синтаксис:

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

Ответ 2

Вы можете проверить, является ли Color Color.Empty(значение по умолчанию: default(Color)) или использовать значение с нулевым значением и проверить значение null.

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

Ответ 3

Не указывайте цвет. Вместо этого укажите "уровень ошибки" и сопоставьте между каждым уровнем ошибки и значением цвета. Таким образом, 0 и ниже может быть черным, затем 1 = янтарный, > 2 = красный. Не нужно беспокоиться о значениях по умолчанию и/или не указывать значение.

Ответ 4

Использование:

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