如何在自定义方法中处理错误的参数值
本文关键字:错误 参数 处理 自定义方法 | 更新日期: 2023-09-27 18:25:07
我有一个以SortelList
为私有字段的类:这个列表的每个元素都有一个string
作为键,自定义数据作为值。当我调用类的Update
方法时,我指定密钥和数据,并:
- 如果列表中不包含指定的键,则会向列表中添加一个新条目
-
否则,将使用指定的数据更新当前数据(因此不会引发异常)。
public class Cache { private SortedList<string, Data> _list; // ... constructors and other methods public void Update(string key, Data value, int number) { Data data; if (this._list.TryGetValue(key, out data)) { // update data using value and number // // ... _list[key] = data; // overwrite the previous data with the updated data } else { _list.Add(key, value); } } }
因此,即使指定了重复的键,这个类也不会抛出异常。但number
参数的值必须为正,则值应忽略小于或等于零的值。排除这些值的更好方法是什么?
- 我可以忽略价值观小于或等于零:
if (number <= 0) return;
- 我可以让
Update
方法返回一个bool,所以:if (number <= 0) return false;
- 当数字不是正时,我可以让
Update
方法抛出一个异常
我会抛出ArgumentOutOfRangeException,如下所示:
public void Update(string key, Data value, int number)
{
if (number <= 0)
{
throw new ArgumentOutOfRangeException("number must be positive");
}
// Rest of the method
}
这是绝大多数.Net框架在验证参数时所遵循的模式。
另一种选择是让Update
方法返回一个布尔值,指示操作是否成功。这对于允许API的用户在不抛出异常的情况下调用该方法非常有用(如TryParse
方法),但是在这种情况下,没有必要,因为该方法的用户只需在调用该方法之前检查number
参数的值,就可以轻松地避免抛出异常。
如上所述,您有很多选项,我建议您将返回值更改为bool并返回false以声明它没有更新,或者抛出ArgumentOutOfRangeException。
返回false的好处显然是不会引发异常,但是消费者必须确认更新已经发生,否则当访问该值并发现它没有更新时,他们会感到困惑。
如果使用异常方法,则可以向该方法添加xml注释,以声明如果数字为零或更低,则可以引发异常。这将显示在visualstudio的工具提示和对象浏览器中,以便消费者知道这可能发生。
/// <summary>
/// Updates the value in the cache for the supplied key.
/// </summary>
/// <param name="key">The key in the cache.</param>
/// <param name="number">The the number to store.</param>
/// <exception cref="ArgumentOutOfRangeException">Thrown if number is less than 1.</exception>
public void Update(string key, Data value, int number)