【问题标题】:Storing an exception as a variable将异常存储为变量
【发布时间】:2013-10-20 02:59:38
【问题描述】:

我遇到了通过另一个代码库处理异常的问题。有谁知道是否可以将异常存储为变量以便调用它?

我对 C# 有点陌生,但我的印象是您可以在 var 中存储任何内容。我需要传递它,因为我在异步线程中抛出了一个异常,我需要将它移回处理异常的主线程。我无法通过它,因为异步类只能是 Task 或 Void。有什么想法可以让这样的事情发挥作用吗?

var passedException = Exception(123456,"Bad thing that happened");
throw new passedException;

【问题讨论】:

  • 如果您使用的是Task,那么当您尝试获取结果或等待任务完成时将抛出AggregateException

标签: c# variables exception asynchronous var


【解决方案1】:

您应该更仔细地查看var 数据类型实际上是什么,它与您的代码无法正常工作无关。

这里有一些问题;您尝试在不使用 new 关键字的情况下调用 Exception 构造函数。在下一行中,当它仅适用于类型时,您尝试在实例上使用 new 关键字。

 Exception e = new Exception("My custom message!");
 throw e;

工作得很好。

如果你想使用var,那么你可以使用var e,但它在这里没有任何价值,imo 只是对该功能的滥用。 var 只是语法糖,只有在可以从语句右侧推断出类型时,编译器才会允许它。

【讨论】:

    【解决方案2】:
    var passedException = new Exception(123456,"Bad thing that happened");
    throw passedException;
    

    【讨论】:

      【解决方案3】:

      只需将new 关键字移动到您要创建Exception 对象的第一行:

      var passedException = new Exception(123456,"Bad thing that happened");
      throw passedException;
      

      【讨论】:

        猜你喜欢
        • 2012-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-13
        • 2018-07-03
        • 2011-03-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多