结构有单独的默认无参数构造函数,当调用这些构造函数时,即使所有参数都是可选的,也不会使用参数调用构造函数重载。因此,在不向构造函数传递任何参数的情况下创建结构会调用其默认构造函数,并导致其字段初始化为0,完全忽略具有可选参数的构造函数。
documentation
:
如果使用默认的无参数构造函数实例化struct对象,则所有成员都将根据其默认值进行赋值。
也许您可以将这些字段设置为null,并检查null而不是-1:
public struct InputCodeSet
{
public int? primary;
public int? secondary;
public InputCodeSet(int? primary = null, int? secondary = null)
{
this.primary = primary;
this.secondary = secondary;
}
public bool IsValid
{
get { return primary != null && primary < InputCode.MAX && secondary != null && secondary < InputCode.MAX; }
}
}