parametros - C#4.0: ¿Puedo usar un color como parámetro opcional con un valor predeterminado?
parametros opcionales c# (4)
No especifique el color. En su lugar, proporcione un "nivel de error" y tenga una asignación entre cada nivel de error y un valor de color. De esa manera, 0 y debajo podrían ser negros, luego 1 = ámbar,> 2 = rojo. No tiene que preocuparse por los valores predeterminados y / o por no especificar un valor.
Esta pregunta ya tiene una respuesta aquí:
public void log(String msg, Color c = Color.black)
{
loggerText.ForeColor = c;
loggerText.AppendText("/n" + msg);
}
Esto da como resultado un error de que c debe ser una constante de compilación. He leído un poco sobre esto y la mayoría de los ejemplos están relacionados con cadenas y caracteres. Me he dado cuenta de que puedo usar la clase de colorconverter pero no estoy seguro de que sea muy eficiente. ¿Hay alguna forma de pasar un color básico como parámetro opcional?
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);
}
Puede verificar si Color es Color.Empio (que es el valor predeterminado: default(Color)
) o usar un valor que pueda contener nulos y verificar si es nulo.
public void log(String msg, Color? c = null) { ... }
Sugerencia de uso:
public GraphicsLine(Point startPoint, Point endPoint, Color? color = null, double width = 1.0)
{
StartPoint = startPoint;
EndPoint = endPoint;
Color = color ?? Colors.Black;
Width = width;
}
También me he topado con esto y la única solución que he encontrado es usar nullables.
public void log(String msg, Color? c = null)
{
loggerText.ForeColor = c ?? Color.Black;
loggerText.AppendText("/n" + msg);
}
Otra posible sintaxis es:
loggerText.ForeColor = c.GetValueOrDefault(Color.Black);