2010-05-10 103 views
42
public void log(String msg, Color c = Color.black) 
    { 
     loggerText.ForeColor = c; 
     loggerText.AppendText("\n" + msg); 

    } 

这会导致错误c必须是编译时常量。我已经阅读了这一点,大多数例子都是关于字符串和整数的。我发现我可以使用colorconverter类,但我不确定它会非常有效。有没有办法将基本颜色作为可选参数传递?C#4.0:我可以使用Color作为默认值的可选参数吗?

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

回答

83

我也遇到过这个问题,我发现的唯一解决方法是使用空值。

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

其他可能的语法是:

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

你也可以使用'默认值(色彩)'作为默认值 - 但有时这可能使人们无法区分有效的参数值的默认值。在这种情况下,Nullable倾向于更好。 – LBushkin 2010-05-10 16:31:06

+0

@Bushkin:我完全同意这一点! – Simon 2010-05-10 16:32:01

+0

thx ..用颜色解决了我的问题。 +1 – kplshrm7 2015-11-26 10:17:22

8

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

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

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

+0

+1强调什么,而不是如何。 – 2010-05-10 16:38:24

+2

完全不同意 - 除了不回答问题外,这引入了一个新的语义“错误级别”,这使得该方法在不同的应用程序中变得更加有用(如果我希望警告在一个应用程序中是橙色而在另一个应用程序中是黄色的话)。 – Justicle 2011-09-25 21:52:36

+0

@Justicle:样式表? – sisve 2012-05-15 03:17:53

0

建议搭配:

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

Color.Black,而不是Colors.Black – Emanuele 2017-07-06 13:00:39

相关问题