c# - 如何在自定义方法中处理错误的参数值?

标签 c# .net exception

我有一个类 SortelList作为私有(private)字段:此列表的每个元素都有一个 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的值argument 必须是正数,那么小于或等于零的值应该被忽略。排除这些值的更好方法是什么?

  • 我可以忽略小于或等于零的值: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 方法返回一个 bool 值,指示操作是否成功。这对于允许您的 API 用户调用该方法而不抛出异常(如使用 TryParse 方法)很有用,但是在这种情况下没有必要,因为该方法的用户已经可以简单地通过在调用方法之前检查 number 参数的值来简单地避免抛出异常。

关于c# - 如何在自定义方法中处理错误的参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9327543/

相关文章:

c++ - 从终止处理程序访问所有未捕获的异常

c - 从内存中读取数据

c++ - 如何调试未知代码中的异常?

c# - 创建动态优惠券检查器

c# - 如何在 Visual Studio Tools For Office (VSTO) 2010 Outlook 加载项完成后进行清理

.net - 为什么Microsoft在.net 3.5 SP1之前淘汰了JavaScriptSerializer并在此之后再次激活?

c# - 将接口(interface)与 WCF 结合使用

c# - 使用非托管代码使用扩展名获取文件图标时在 x86 系统上获取异常

c# - 在 app.config 中加密连接字符串

c# - 从通用方法调用中转换结果?