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

发布于 2024-09-12 18:15:45 字数 344 浏览 7 评论 0原文

我开始利用 .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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

假装不在乎 2024-09-19 18:15:45

可空值类型可在此类情况下提供帮助。

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

    public MyObject(int foo, string bar, Color? rgb = null) 
    { 
        this.Rgb = rgb ?? Color.Transparent;
        // .... 
    } 
}

顺便说一句,之所以需要这样做,是因为默认值是在编译期间在调用点填充的,并且静态只读值直到运行时才设置。 (通过类型初始值设定项)

Nullable value types can be used to help in situations like this.

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

    public MyObject(int foo, string bar, Color? rgb = null) 
    { 
        this.Rgb = rgb ?? Color.Transparent;
        // .... 
    } 
}

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)

仙气飘飘 2024-09-19 18:15:45

对于这种情况,我根本不喜欢可选参数。在我看来,可选参数的最佳用例是与 COM 的互操作,其中可选参数的使用相当多。像这样的情况是(我猜)可选参数直到 4.0 才进入该语言的原因之一。

不要创建可选参数,而是像这样重载该函数:

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

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

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:

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

public myObject(int foo, string bar, Color RGB) {
...
}
昇り龍 2024-09-19 18:15:45

使用 'default' 关键字进行更新,自 C# 7.1 起可用:

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

Color 结构的默认值是空结构,相当于 Color.Transparent

Updated using the 'default' keyword, available as of C# 7.1:

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

The default value of a Color struct is an empty struct, equivalent to Color.Transparent

女皇必胜 2024-09-19 18:15:45

试试这个:

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
    }

}

Try this:

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
    }

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文