代码如下:
private void Print(string message, Color color = Color.White) {}
报错: “color”的默认参数值必须为编译时常量
C# 函数参数默认值问题
答案:2 悬赏:0
解决时间 2021-04-28 11:22
- 提问者网友:醉人眸
- 2021-04-27 20:37
最佳答案
- 二级知识专家网友:迷人小乖乖
- 2021-04-27 22:14
C# 有2种不同的常量定义方式:编译时常量(compile-time) 和运行时常量(runtime)。所谓编译时常量,是以 const 关键字定义,所谓编译时是常量则以 readonly 关键字定义。
C# 规定参数的默认值必须是编译时能确定的常量值。
这些参数的类型可以是 C# 认定的基元类型。还可以包括枚举类型,以及能设为 null 的任何引用类型。
Color 这个枚举类属于运行时常量。
如果硬要写一个带默认值的函数,只能利用重写的方法,例如:
private void Print(string message)
{
Color color = Color.White;
}
private void Print(string message, Color color)
{
}
【附】C# 基元类型:
sbyte / byte / short / ushort /int / uint / long / ulong / char / float / double / bool / decimal /object / string
C# 规定参数的默认值必须是编译时能确定的常量值。
这些参数的类型可以是 C# 认定的基元类型。还可以包括枚举类型,以及能设为 null 的任何引用类型。
Color 这个枚举类属于运行时常量。
如果硬要写一个带默认值的函数,只能利用重写的方法,例如:
private void Print(string message)
{
Color color = Color.White;
}
private void Print(string message, Color color)
{
}
【附】C# 基元类型:
sbyte / byte / short / ushort /int / uint / long / ulong / char / float / double / bool / decimal /object / string
全部回答
- 1楼网友:浪者不回头
- 2021-04-27 22:41
楼主你好~
首先说明,缺省参数是.net4.0以后才被c#支持的语法,还是建议使用重载来实现这个功能。
对于缺省参数是有两个限制的:
1. 缺省参数一定要放在普通参数之后,params参数之前。
2. 缺省参数的默认值一定要是一个常量。
所以您的users实体例子违反了第二个限制。
请追问~
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息