默认参数值必须是编译时常数错误消息

本文关键字:常数 错误 消息 编译 参数 默认 | 更新日期: 2023-09-27 17:57:41

我似乎收到了一条错误消息,就像我在标题中提到的那样。"‘随机化器’的默认参数值必须是编译时常数错误消息。"

对于此代码:

    public Random Randomizer {
            get;
            private set;
        }
        public ShuffleDeck( Random randomizer = new Random(DateTime.Now.Millisecond)) {
            this.Randomizer = randomizer;
        }

我不明白为什么?有人知道线索吗?

默认参数值必须是编译时常数错误消息

我不明白为什么?

这就是该语言的文档所说的。

默认值必须是以下类型的表达式之一:

  • 一个常量表达式
  • 形式为new ValType()的表达式,其中ValType是值类型,例如枚举或结构
  • 默认形式(ValType)的表达式,其中ValType是一种值类型

您可以执行(但请参阅Servy的评论):

public ShuffleDeck(Random randomizer = null) {
    if (randomizer == null)
        this.Randomizer = new Random(DateTime.Now.Millisecond);
    else
        this.Randomizer = randomizer;
   //or this.Randomizer = randomizer ?? new Random());
}

或者你可以有重载构造函数,比如:

public ShuffleDeck()
    : this(new Random(DateTime.Now.Millisecond))
{
}
public ShuffleDeck(Random randomizer)
{
    this.Randomizer = randomizer;
}