【问题标题】:C# 4.0: Can I use a Color as an optional parameter with a default value? [duplicate]C# 4.0:我可以使用 Color 作为具有默认值的可选参数吗? [复制]
【发布时间】:2011-02-17 18:20:22
【问题描述】:
    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);
    }

【问题讨论】:

    标签: c# optional-parameters


    【解决方案1】:

    我也遇到过这种情况,我发现的唯一解决方法是使用可空值。

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

    其他可能的语法是:

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

    【讨论】:

    • 您也可以使用default(Color) 作为默认值 - 但有时这会导致无法区分默认值和有效参数值。在这种情况下,可空值往往更好。
    • @Bushkin:我完全同意这一点!
    • thx.. 解决了我的颜色问题。 +1
    • 像魅力一样工作!
    【解决方案2】:

    使用建议:

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

    【讨论】:

    • Color.Black,而不是 Colors.Black
    【解决方案3】:

    不要指定颜色。改为提供“错误级别”,并在每个错误级别和颜色值之间建立映射。这样 0 及以下可能是黑色,然后 1 = 琥珀色,>2 = 红色。无需担心默认值和/或不指定值。

    【讨论】:

    • +1 强调什么,而不是如何。
    • 完全不同意——除了不回答问题之外,这还引入了一个新的语义“错误级别”,这使得该方法在不同的应用程序中变得不那么有用(如果我希望警告在一个应用程序中显示为橙色,并且另一个黄色)。
    • @Justicle 我明白你在说什么,但实际的颜色应该是一个演示问题,这样 semantics 在每个应用程序中都是相同的,即使每个应用程序的呈现方式可能不同(日志文件中的列、UI 元素的颜色、发送电子邮件或不发送电子邮件等)。
    【解决方案4】:

    您可以检查 Color 是否为 Color.Empty(这是默认值:default(Color))或使用可为空的值并检查是否为空。

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

    【讨论】:

      猜你喜欢
      • 2011-01-11
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 2011-05-26
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多