Tag: default arguments

结构初始化和默认参数的非直观行为

public struct Test { public double Val; public Test(double val = double.NaN) { Val = val; } public bool IsValid { get { return !double.IsNaN(Val); } } } Test myTest = new Test(); bool valid = myTest.IsValid; 上面给出了valid==true因为没有调用默认arg的构造函数,并且使用标准默认值val = 0.0创建对象。 如果struct是一个类,行为是valid==false ,这是我所期望的。 我发现行为的这种差异,特别是结构案例中的行为令人惊讶和不直观 – 发生了什么? stuct构造的默认arg服务是什么? 如果它无用为什么要让这个编译? 更新:澄清这里的重点不在于行为是什么 – 而是为什么在没有警告的情况下进行编译并且行为不直观。 即如果未应用默认arg,因为在新的Test()情况下没有调用构造函数,那么为什么要让它编译?