gpt4 book ai didi

c# - 如果不使用异常,哪种技术是正确的?

转载 作者:太空狗 更新时间:2023-10-30 00:16:17 26 4
gpt4 key购买 nike

假设我有这样一个类

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或者……我猜还有一些其他的事情。所以我只想为自己制定标准——哪种技术更好,什么时候……

最佳答案

让我们直接开始吧;异常(exception)情况可能“很慢”,但这正是您只在异常(exception)情况下使用它们的原因。

在您的情况下,如果超出给定范围的数字是异常的(即,永远不应该发生),那么您可以抛出异常。但是,如果这类似于用户输入,那么用户填写可接受范围之外的值绝对不是异常(exception)!在这种情况下,您需要验证输入的值是否在可接受的范围内。

关于此解决方案的另一点:

set
{
if (!(value >= -10 && value <= 10))
return;
_x = value;
}

IMO,这同样糟糕(如果不是更糟的话)。原因是如果我设置 X=10,我希望当我读取 X 时它具有我刚刚设置的值。

关于c# - 如果不使用异常,哪种技术是正确的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7766030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com