创建c#异常并不要抛出它

创建c#异常并不要抛出它,c#,exception-handling,C#,Exception Handling,有没有比我在下面写的更好的方法来正确设置异常,就像抛出异常一样 try { throw new Exception("Blah"); } catch (Exception exe) { Assert.NotNull(exe.StackTrace); DoSomeWork(exe); // throw; } 简单的回答是:不 系统异常属性填写如下: 默认情况下,在抛出异常对象之前立即捕获堆栈跟踪。当没有引发异常时,使用Environment.StackTrace获取堆栈跟踪信息 因此,如果您确实

有没有比我在下面写的更好的方法来正确设置异常,就像抛出异常一样

try {
throw new Exception("Blah");
}
catch (Exception exe) {
Assert.NotNull(exe.StackTrace);
DoSomeWork(exe);
// throw;
}

简单的回答是:不

系统异常属性填写如下:

默认情况下,在抛出异常对象之前立即捕获堆栈跟踪。当没有引发异常时,使用Environment.StackTrace获取堆栈跟踪信息

因此,如果您确实需要一个处于抛出状态的
异常
对象,那么除了抛出并捕获它之外,没有其他好方法

仍然不要放弃主要问题:您真的需要异常对象吗

如果您有一个将
System.Exception
作为输入参数的方法,并且您需要一个StackTrace,请考虑以下可能的解决方案:

  • 带有可选StackTrace输入参数的方法重载
  • System.Exception的继承者,具有隐藏StackTrace属性,该属性在创建对象时存储StackTrace,而不是抛出
  • 最后,您可以为System.Exception类创建一个扩展方法,该类“填充”System.Exception的实例。异常:

    private void MyCode()
    {
        Exception exe = new Exception("Blah");
        exe.Populate();
        DoSomeWork(exe);
    }
    
    
    public static void Populate(this System.Exception source)
    {
        try
        {
            throw source;
        }
        catch
        {
        }
    }
    

  • 简单的回答是:不

    系统异常属性填写如下:

    默认情况下,在抛出异常对象之前立即捕获堆栈跟踪。当没有引发异常时,使用Environment.StackTrace获取堆栈跟踪信息

    因此,如果您确实需要一个处于抛出状态的
    异常
    对象,那么除了抛出并捕获它之外,没有其他好方法

    仍然不要放弃主要问题:您真的需要异常对象吗

    如果您有一个将
    System.Exception
    作为输入参数的方法,并且您需要一个StackTrace,请考虑以下可能的解决方案:

  • 带有可选StackTrace输入参数的方法重载
  • System.Exception的继承者,具有隐藏StackTrace属性,该属性在创建对象时存储StackTrace,而不是抛出
  • 最后,您可以为System.Exception类创建一个扩展方法,该类“填充”System.Exception的实例。异常:

    private void MyCode()
    {
        Exception exe = new Exception("Blah");
        exe.Populate();
        DoSomeWork(exe);
    }
    
    
    public static void Populate(this System.Exception source)
    {
        try
        {
            throw source;
        }
        catch
        {
        }
    }
    

  • var myExceptionIDontWantToThrow=新异常(“Blah”)你说的“更好”是什么意思?你所说的“正确设置就像抛出时一样”是什么意思?你的最终目标是什么?正确设置是什么意思?您期望的输出是什么?他的意思是他想要
    StackTrace
    ,但它是
    null
    。因此,真正的问题是:“如何在不引发异常的情况下获取stacktrace”如何使用你说的“更好”是什么意思?你所说的“正确设置就像抛出时一样”是什么意思?你的最终目标是什么?正确设置是什么意思?您期望的输出是什么?他的意思是他想要
    StackTrace
    ,但它是
    null
    。因此,真正的问题是:“如何在不引发异常的情况下获取stacktrace”使用如何?