如何将DateTime.Now.Year用作可选参数的默认值

D. *_*own 1 c# class optional-parameters

你能告诉我怎样才能解决这个错误

默认参数值必须是编译时常量"

我知道这个问题并且已经在Stack Overflow上看到了方法的解决方案,但是我没有得到如何为类解决这个问题.

public class member
{
    public string name { get; }
    public string email { get; set; }
    public int entryYear;
    static int memberNbr;

    public member (string _name, int _entryyear = DateTime.Now.Year, string _email = "")
    {
        name = _name;
        entryyear = _entryyear;
        email = _email;
    }
}
Run Code Online (Sandbox Code Playgroud)

mas*_*son 5

不是让它成为可选参数,而是不同的构造函数重载呢?在第二个构造函数中,不要将entryYear作为参数,而是在构造函数体中初始化它?

虽然我们正在使用它,但是让我们使用适当的C#约定,例如属性名称为PascalCase,构造函数参数为camelCased.并且不使用属性名称的缩写,并且当它明显属于单个实例时不要使MemberNumber成为静态.

public class Member
{
    public string Name { get; }

    public string Email { get; }

    public int EntryYear { get; }

    public int MemberNumber {get; }

    public Member(string name, int entryYear, string email = "")
    {
        Mame = Name;
        EntryYear = entryYear;
        Email = email;
    }

    public Member(string name, string email = "")
    {
        Mame = Name;
        EntryYear = DateTime.Now.Year;
        Email = email;
    }
}
Run Code Online (Sandbox Code Playgroud)

你没有问过它,但用空字符串初始化电子邮件真的没有意义.将它默认为null可能更好.