2010-05-10 111 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

相關問題