С# 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);
}
Ответы
Ответ 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;
}