【发布时间】:2011-10-14 18:19:15
【问题描述】:
假设我有这样的课程
class A
{
private int _x; //must be between [-10 10]
private int _y; //must be between [10 20]
}
使用属性我有几个变量的变体
public int X
{
get { return _x; }
set
{
if (!(value >= -10 && value <= 10))
throw new Exception("Some error text");
_x = value;
}
}
或
public int X
{
get { return _x; }
set
{
if (!(value >= -10 && value <= 10))
return;
_x = value;
}
}
(与 _y 相同)。
在第一种情况下,我不确定我是否要使用异常(它们很慢并且有其他已知问题)。其次,我要为不使用它们的值的模糊性而付出代价(以某种不同的方式用于 _x 和 _y)。
显然我可以在我的情况下(如果处理对象列表)那样使用
public bool IsValid = true;
//...
public int X
{
get { return _x; }
set
{
if (!(value >= -10 && value <= 10))
{
IsValid = false;
return;
}
_x = value;
}
}
class AWrapper
{
public List<A> AList {get; set;}
public AWrapper(List<A> list)
{
AList = list.Where(x => x.IsValid == true).ToList();
}
}
或一些validator class 或……我猜还有一些其他的东西。 所以我只想为自己制定标准——哪种技术更好,什么时候……
【问题讨论】:
-
抛出异常。最好尽快知道操作失败,而不是仅仅为了弄清楚这一点而检查一些变量。如果您完全熟悉 C,就像必须在
errno和异常之间进行选择一样。并不总是最好用。