gpt4 book ai didi

c# - 处理属性设置/获取中的异常

转载 作者:太空宇宙 更新时间:2023-11-03 18:47:23 24 4
gpt4 key购买 nike

在下面的示例代码中,我获取了一个字符串列表并将它们连接成一个带分隔符的字符串。当我将 setter 与空列表一起使用时会出现问题。 ToString 方法抛出 ArgumentOutOfRangeException,因为第二个参数是 -1。

应该如何处理像这样的条件(getters/setters 中抛出的异常)?

我不喜欢 setter 抛出异常的事实,因为调用者不知道类的内部结构,因此不必处理(甚至不知道如何处理)异常。在 getter/setter 中捕获所有异常并安静地处理它们听起来也不是一个好主意,因为调用者不会知道 getter/setter 失败。

//I realize that this isn't the best code but I wanted to produce an example
//to demonstrate my question.
private string theStringVariable;
const string DELIMITER = ",";

public IList<string> StringList
{
set
{
StringBuilder stringBuilder = new StringBuilder();
foreach(string entry in value)
{
stringBuilder.Append(entry);
stringBuilder.Append(DELIMITER);
}
theStringVariable = stringBuilder.ToString(0, stringBuilder.Length - 1);
}
}

最佳答案

您应该检查潜在的、常见的错误情况,并在前面抛出您自己的异常(在 StringBuilder 错误之前),并附上有意义的错误消息。

在您的情况下,如果使用空字符串列表调用 setter ,您很可能希望使用某种形式的 ArgumentException。这里的关键是你的异常可以说“参数包含一个空集合”而不是“索引越界”,这将使调用者立即理解为什么他们的调用中有一个“真正的”问题。


旁注:在像您发布的代码这样的情况下 - 我也会考虑将其设为方法而不是属性。您在这个属性 setter 中做了很多“工作”,这有点出乎意料。通过将此作为一种方法,您将为用户提供一个线索,即此属性中正在发生一些“处理”...

关于c# - 处理属性设置/获取中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3206560/

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