web-dev-qa-db-fra.com

C # 4.0: Puis-je utiliser une couleur comme paramètre facultatif avec une valeur par défaut?

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

    }

Il en résulte une erreur selon laquelle c doit être une constante de temps de compilation. J'ai lu un peu à ce sujet et la plupart des exemples traitent de chaînes et d'entiers. J'ai compris que je pouvais utiliser la classe colorconverter mais je ne suis pas sûr que ce sera très efficace. Existe-t-il un moyen de simplement passer une couleur de base comme paramètre facultatif?

    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);
    }
57
DTown

J'ai également rencontré cela et la seule solution de contournement que j'ai trouvée est d'utiliser nullables.

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

Une autre syntaxe possible est:

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

Vous pouvez vérifier si Color est Color.Empty (qui est la valeur par défaut: default(Color)) ou utiliser une valeur nullable et rechercher null.

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

Ne spécifiez pas la couleur. Fournissez un "niveau d'erreur" à la place et établissez un mappage entre chaque niveau d'erreur et une valeur de couleur. De cette façon, 0 et moins pourraient être noirs, puis 1 = ambre,> 2 = rouge. Pas besoin de vous soucier des valeurs par défaut et/ou de ne pas spécifier de valeur.

3
Neil Barnwell

Suggestion d'utilisation:

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