我开始利用.Net 4.0中的可选参数
我遇到的问题是当我尝试声明System.Drawing.Color的可选参数时:
public myObject(int foo, string bar, Color rgb = Color.Transparent)
{
// ....
}
我希望Color.Transparent成为rgb参数的默认值。问题是,我一直得到这个编译错误:
'rgb'的默认参数值必须是编译时常量
如果我只能将原始类型用于可选参数,那么它真的会杀死我的计划。
答案 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
}
}