首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用System.Drawing.Color类型的可选参数

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

Stack Overflow用户
提问于 2010-08-06 02:42:48
回答 4查看 6.8K关注 0票数 17

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

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

代码语言:javascript
运行
复制
public myObject(int foo, string bar, Color rgb = Color.Transparent)
{
    // ....
}

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

“rgb”的

默认值必须是编译时常量。

如果我只能对可选的参数使用原语类型,那么它确实会扼杀我的计划。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-10-25 03:48:52

使用“默认”关键字更新,可从C# 7.1中获得:

代码语言:javascript
运行
复制
public myObject(int foo, string bar, Color rgb = default) {
    // ....
}

颜色结构的默认值为空结构,等效于Color.Transparent

票数 1
EN

Stack Overflow用户

发布于 2010-08-06 03:32:50

在这种情况下,可以使用可空值类型来帮助您。

代码语言:javascript
运行
复制
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值。(按类型初始化)

票数 25
EN

Stack Overflow用户

发布于 2010-08-06 02:48:37

我一点也不喜欢这种情况下的可选参数。IMO可选参数的最佳用例是与COM互操作,其中可选参数经常被使用。这种情况是为什么(我猜)可选参数直到4.0才进入语言的原因之一。

与其创建可选参数,不如重载如下函数:

代码语言:javascript
运行
复制
public myObject(int foo, string bar) : this (foo, bar, Color.Transparent) {};

public myObject(int foo, string bar, Color RGB) {
...
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3420678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档