如何设置通过 属性 setter 检查无效的默认值?
How do I set a default value that is invalidated by property setter checking?
我有两个具有匹配属性的字段,每个字段都在 setter 中进行数据验证。我希望默认值明显不正确。因此,我默认将它们初始化为 '[=15=]'
和 -1
.
private char _zoneLetter = '[=12=]';
private short _zoneNumber = -1;
这样一来,这些值可能存在的唯一方法就是从未设置它们,因为我在 setter 中抛出了一个异常。
public char ZoneLetter
{
get { return _zoneLetter; }
private set
{
if (!char.IsLetter(value)) throw new ArgumentException("No special characters are allowed.");
_zoneLetter = value;
}
}
public short ZoneNumber
{
get { return _zoneNumber; }
private set
{
if (!Enumerable.Range(1, 60).Contains(value)) throw new ArgumentException("Must be an integral value in the range [1,60].");
this._zoneNumber = value;
}
}
麻烦的是,当我输入完全有效的数据时,仍然会抛出异常,告诉我值 '[=15=]'
不正确,即使在构造函数参数中输入 'a'
也是如此。
public UtmEvent(double unixTime, double easting, double northing, short zoneNumber, char zoneLetter)
: base(unixTime)
{
this.Easting = easting;
this.Northing = northing;
this.ZoneNumber = zoneNumber;
this.ZoneLetter = ZoneLetter;
}
当我将默认值更改为有效值(例如 'a'
和 30
时),我的测试检查没有抛出任何异常。请告诉我我缺少什么。我是 .Net 的新手,不知道发生了什么,哈哈。
您有一个大写错误,
this.ZoneLetter = ZoneLetter;
应该是
this.ZoneLetter = zoneLetter;
我的眼睛错过了构造函数中的 this.ZoneLetter = ZoneLetter;
行。我试图将 属性 分配给自身,导致 getter 获取 '[=11=]'
的默认值并将其反馈回 setter 的验证条件。让这成为一个教训,表明不要选择糟糕的参数名称的重要性。 Note to self: should not be the exact same as property or field names, with only the capitalization differing.
哦,屈辱
我有两个具有匹配属性的字段,每个字段都在 setter 中进行数据验证。我希望默认值明显不正确。因此,我默认将它们初始化为 '[=15=]'
和 -1
.
private char _zoneLetter = '[=12=]';
private short _zoneNumber = -1;
这样一来,这些值可能存在的唯一方法就是从未设置它们,因为我在 setter 中抛出了一个异常。
public char ZoneLetter
{
get { return _zoneLetter; }
private set
{
if (!char.IsLetter(value)) throw new ArgumentException("No special characters are allowed.");
_zoneLetter = value;
}
}
public short ZoneNumber
{
get { return _zoneNumber; }
private set
{
if (!Enumerable.Range(1, 60).Contains(value)) throw new ArgumentException("Must be an integral value in the range [1,60].");
this._zoneNumber = value;
}
}
麻烦的是,当我输入完全有效的数据时,仍然会抛出异常,告诉我值 '[=15=]'
不正确,即使在构造函数参数中输入 'a'
也是如此。
public UtmEvent(double unixTime, double easting, double northing, short zoneNumber, char zoneLetter)
: base(unixTime)
{
this.Easting = easting;
this.Northing = northing;
this.ZoneNumber = zoneNumber;
this.ZoneLetter = ZoneLetter;
}
当我将默认值更改为有效值(例如 'a'
和 30
时),我的测试检查没有抛出任何异常。请告诉我我缺少什么。我是 .Net 的新手,不知道发生了什么,哈哈。
您有一个大写错误,
this.ZoneLetter = ZoneLetter;
应该是
this.ZoneLetter = zoneLetter;
我的眼睛错过了构造函数中的 this.ZoneLetter = ZoneLetter;
行。我试图将 属性 分配给自身,导致 getter 获取 '[=11=]'
的默认值并将其反馈回 setter 的验证条件。让这成为一个教训,表明不要选择糟糕的参数名称的重要性。 Note to self: should not be the exact same as property or field names, with only the capitalization differing.
哦,屈辱