Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异常类型类型考虑为集合下溢场景抛出_C#_.net_Exception Handling - Fatal编程技术网

C# 异常类型类型考虑为集合下溢场景抛出

C# 异常类型类型考虑为集合下溢场景抛出,c#,.net,exception-handling,C#,.net,Exception Handling,问题陈述: 我一直在构建处理集合的API。最近我遇到了一个场景,我的API必须在对集合执行实际操作(更准确地说,这里的it操作是删除/删除操作)之前验证集合下溢场景。如果发现API遇到下溢场景,它必须向使用该API的客户端抛出异常 P>在传感器客户端消耗API的情况下,API可以考虑抛出的最好的异常类型是什么? 我能想到的可能解决方案有: 抛出带有消息的算术异常,例如“队列为空”。MSDN文章建议考虑下溢场景的算术例外 public T Dequeue() { if (this.Siz

问题陈述:

我一直在构建处理集合的API。最近我遇到了一个场景,我的API必须在对集合执行实际操作(更准确地说,这里的it操作是删除/删除操作)之前验证集合下溢场景。如果发现API遇到下溢场景,它必须向使用该API的客户端抛出异常

<> P>在传感器客户端消耗API的情况下,API可以考虑抛出的最好的异常类型是什么? 我能想到的可能解决方案有:

  • 抛出带有消息的算术异常,例如“队列为空”。MSDN文章建议考虑下溢场景的算术例外

    public T Dequeue()
    {
        if (this.Size == 0)
        {
            throw new ArithmeticException("Queue is empty");
        }
    
        return this.ExtractTop();
    }
    
  • 创建自定义异常类型UnderflowException类似于C#中已经存在的OverflowException


  • 对于API消费者来说,更有意义的是(1)或(2)中给出的解决方案吗?

    不,这些例外是针对数字类型的,队列不是数字的。NET已经有一个队列类,只需抛出与它相同的队列类即可。无效操作异常。感谢您的回答。我同意,在这种情况下,例外情况并不意味着是数字类型。但是,问题是,作为客户端的API使用者,如果用户能够处理特定的异常类型,这对用户来说不是更有意义吗?由于下溢场景非常特殊,只有当队列中没有项目并且您试图从中退出元素时才会发生下溢,而在许多其他情况下可能会发生InvalidOperationException?这只意味着有一件事情是由dequeue()引发的,从空队列中退出项目不是有效的操作。但是,嘿,做你自己的事情并记录它的含义。不,这些例外是针对数字类型的,队列不是数字的。NET已经有一个队列类,只需抛出与它相同的队列类即可。无效操作异常。感谢您的回答。我同意,在这种情况下,例外情况并不意味着是数字类型。但是,问题是,作为客户端的API使用者,如果用户能够处理特定的异常类型,这对用户来说不是更有意义吗?由于下溢场景非常特殊,只有当队列中没有项目并且您试图从中退出元素时才会发生下溢,而在许多其他情况下可能会发生InvalidOperationException?这只意味着有一件事情是由dequeue()引发的,从空队列中退出项目不是有效的操作。但是,嘿,做你自己的事情,记录它的意思。
    public T Dequeue()
    {
        if (this.Size == 0)
        {
           throw new UnderflowException("Queue is Empty");
        }
    
        return this.ExtractTop();
    }