我开始利用.Net 4.0中的可选参数
我遇到的问题是,当我试图声明System.Drawing.Color的可选参数时:
public myObject(int foo, string bar, Color rgb = Color.Transparent)
{
// ....
}我希望Color.Transparent是rgb的默认值。问题是,我一直收到这个编译错误:
“rgb”的
默认值必须是编译时常量。
如果我只能对可选的参数使用原语类型,那么它确实会扼杀我的计划。
发布于 2020-10-25 03:48:52
使用“默认”关键字更新,可从C# 7.1中获得:
public myObject(int foo, string bar, Color rgb = default) {
// ....
}颜色结构的默认值为空结构,等效于Color.Transparent
发布于 2010-08-06 03:32:50
在这种情况下,可以使用可空值类型来帮助您。
public class MyObject
{
public Color Rgb { get; private set; }
public MyObject(int foo, string bar, Color? rgb = null)
{
this.Rgb = rgb ?? Color.Transparent;
// ....
}
}顺便说一句,之所以需要这样做,是因为在编译期间在调用点填充了默认值,直到运行时才设置static readonly值。(按类型初始化)
发布于 2010-08-06 02:48:37
我一点也不喜欢这种情况下的可选参数。IMO可选参数的最佳用例是与COM互操作,其中可选参数经常被使用。这种情况是为什么(我猜)可选参数直到4.0才进入语言的原因之一。
与其创建可选参数,不如重载如下函数:
public myObject(int foo, string bar) : this (foo, bar, Color.Transparent) {};
public myObject(int foo, string bar, Color RGB) {
...
}https://stackoverflow.com/questions/3420678
复制相似问题