使用 System.Drawing.Color 类型的可选参数
我开始利用 .Net 4.0 中的可选参数
我遇到的问题是当我尝试声明 System.Drawing.Color 的可选参数时:
public myObject(int foo, string bar, Color rgb = Color.Transparent)
{
// ....
}
我希望 Color.Transparent 成为 rgb 参数的默认值。问题是,我不断收到此编译错误:
“rgb”的默认参数值必须是编译时常量
如果我只能使用基本类型作为可选参数,它真的会破坏我的计划。
I am starting to take advantage of optional parameters in .Net 4.0
The problem I am having is when I try to declare an optional parameter of System.Drawing.Color:
public myObject(int foo, string bar, Color rgb = Color.Transparent)
{
// ....
}
I want Color.Transparent to be the default value for the rgb param. The problem is, I keep getting this compile error:
Default parameter value for 'rgb' must be a compile-time constant
It really kills my plan if I can only use primitive types for optional params.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
可空值类型可在此类情况下提供帮助。
顺便说一句,之所以需要这样做,是因为默认值是在编译期间在调用点填充的,并且静态只读值直到运行时才设置。 (通过类型初始值设定项)
Nullable value types can be used to help in situations like this.
BTW, the reason this is required is because the default value is populated at the call point during compile and
static readonly
values are not set until runtime. (By the type initializer)对于这种情况,我根本不喜欢可选参数。在我看来,可选参数的最佳用例是与 COM 的互操作,其中可选参数的使用相当多。像这样的情况是(我猜)可选参数直到 4.0 才进入该语言的原因之一。
不要创建可选参数,而是像这样重载该函数:
I'm not a huge fan of optional parameters for cases like this at all. IMO the best use case for optional parameters is interop with COM, where optional parameters are used quite a bit. Situations like these are one of the reasons why (I would guess) that optional parameters didn't make it into the language until 4.0.
Instead of creating an optional parameter, overload the function like so:
使用 'default' 关键字进行更新,自 C# 7.1 起可用:
Color 结构的默认值是空结构,相当于 Color.Transparent
Updated using the 'default' keyword, available as of C# 7.1:
The default value of a Color struct is an empty struct, equivalent to Color.Transparent
试试这个:
Try this: