繁体   English   中英

如何设置通过属性设置器检查无效的默认值?

[英]How do I set a default value that is invalidated by property setter checking?

我有两个具有匹配属性的字段,每个字段在设置器中都有数据验证。 我希望默认值明显不正确。 因此,我默认将它们初始化为'\\0'-1

private char _zoneLetter = '\0';
private short _zoneNumber = -1;

这样一来,这些值唯一可能存在的方法就是永远不要设置它们,因为我在设置器中抛出了异常。

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;
    }
}

问题在于,当我输入完全有效的数据时,仍然会抛出异常,告诉我值'\\0'是不正确的,即使在构造函数参数中输入了'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; 构造函数中的一行。 我试图将属性分配给它自己,导致吸气剂获取默认值'\\0'并将其反馈给setter的验证条件。 让这作为一个教训,表明不要选择低劣的参数名称的重要性。 Note to self: should not be the exact same as property or field names, with only the capitalization differing.

哦,屈辱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM