使用System.Drawing.Color类型的可选参数

时间:2010-08-06 02:42:48

标签: c# .net-4.0 optional-parameters

我开始利用.Net 4.0中的可选参数

我遇到的问题是当我尝试声明System.Drawing.Color的可选参数时:

public myObject(int foo, string bar, Color rgb = Color.Transparent)
{
    // ....
}

我希望Color.Transparent成为rgb参数的默认值。问题是,我一直得到这个编译错误:

  

'rgb'的默认参数值必须是编译时常量

如果我只能将原始类型用于可选参数,那么它真的会杀死我的计划。

4 个答案:

答案 0 :(得分:23)

可以使用Nullable值类型来帮助处理这种情况。

public class MyObject 
{
    public Color Rgb { get; private set; }

    public MyObject(int foo, string bar, Color? rgb = null) 
    { 
        this.Rgb = rgb ?? Color.Transparent;
        // .... 
    } 
}
BTW,这是必需的原因是因为在编译期间在调用点填充了默认值,并且直到运行时才设置static readonly值。 (通过类型初始化程序)

答案 1 :(得分:3)

对于像这样的情况,我不是可选参数的忠实粉丝。 IMO可选参数的最佳用例是与COM互操作,其中可选参数使用相当多。像这样的情况是(我猜)可选参数在4.0之前没有进入语言的原因之一。

不是创建可选参数,而是重载函数,如下所示:

public myObject(int foo, string bar) : this (foo, bar, Color.Transparent) {};

public myObject(int foo, string bar, Color RGB) {
...
}

答案 2 :(得分:1)

使用“默认”关键字更新,自C#7.1起可用:

public myObject(int foo, string bar, Color rgb = default) {
    // ....
}

Color结构的默认值是一个空结构,等效于Color.Transparent

答案 3 :(得分:0)

尝试一下:

public myObject(int foo, string bar, string colorName = "Transparent")
{
    using (Pen pen = new Pen(Color.FromName(colorName))) //right here you need your color
    {
       ///enter code here
    }

}