【发布时间】:2012-02-06 19:15:37
【问题描述】:
在设置了端口号的应用中,我想将可分配给端口号的值限制为 49152 到 65535(含)之间的值。
我编写了一些测试方法来测试超出此范围的任何内容都会导致测试失败。它们确实失败了(正如预期的那样,因为代码尚未考虑到这一点)。
所以我的问题是:将强制无效值的代码放入有效值的最佳位置是什么 - 在这里:
public int Port
{
get
{
return port;
}
set
{
port = value;
}
}
如:
public int Port
{
get
{
return port;
}
set
{
if ((value < 49152) || (value > 65535))
{
value = 55555;
}
port = value;
}
}
...还是其他地方?
【问题讨论】:
-
DJKraze 是谁?实际上,我认为我们确实需要它,因为 49152 以下的数字可能已经在使用,而 65535 以上的数字则不可用。输入端口号的人可能不知道。
-
这是我为了解决争论而不得不发布的一个问题的副本:stackoverflow.com/questions/635519/… 你绝对不应该分配给调用者。它隐藏了错误。这很危险(如果调用者打算输入 49152 但不小心输入了 49151,现在您已经用 55555 掩盖了这个可怕的错误,让程序继续使用与调用者预期完全不同的值)。
-
或者如果您在分配给
Port时不小心引入了一个错误怎么办?假设你喝醉了编码,你写了x.Port = Int32.Parse(s.Substring(s.Length - 1));而不是x.Port = Int32.Parse(s);,所以现在你所有的值都是垃圾。因此,您已经让这个灾难性的错误进入您的程序。不要这样做。 -
我添加了验证标签,因为这确实是问题所在。
标签: c# validation properties