相关疑难解决方法(0)

抛出和抛出新异常之间的区别()

有什么区别

try { ... }
catch{ throw } 
Run Code Online (Sandbox Code Playgroud)

try{ ... }
catch(Exception e) {throw new Exception(e.message) } 
Run Code Online (Sandbox Code Playgroud)

无论第二个显示消息?

c#

156
推荐指数
5
解决办法
19万
查看次数

try/catch/throw和try/catch(e)/ throw e之间的区别

有什么区别

try { }
catch
{ throw; }
Run Code Online (Sandbox Code Playgroud)

try { }
catch(Exception e)
{ throw e;}
Run Code Online (Sandbox Code Playgroud)

什么时候应该使用其中一个?

c# exception-handling

101
推荐指数
4
解决办法
7万
查看次数

用"捕获,何时"捕获异常

我在C#中遇到了这个新功能,它允许在满足特定条件时执行catch处理程序.

int i = 0;
try
{
    throw new ArgumentNullException(nameof(i));
}
catch (ArgumentNullException e)
when (i == 1)
{
    Console.WriteLine("Caught Argument Null Exception");
}
Run Code Online (Sandbox Code Playgroud)

我想知道什么时候这可能有用.

一种情况可能是这样的:

try
{
    DatabaseUpdate()
}
catch (SQLException e)
when (driver == "MySQL")
{
    //MySQL specific error handling and wrapping up the exception
}
catch (SQLException e)
when (driver == "Oracle")
{
    //Oracle specific error handling and wrapping up of exception
}
..
Run Code Online (Sandbox Code Playgroud)

但这又是我可以在同一个处理程序中执行的操作,并根据驱动程序的类型委托给不同的方法.这是否使代码更容易理解?可以说没有.

我能想到的另一个场景是:

try
{
    SomeOperation();
}
catch(SomeException e)
when (Condition == true)
{ …
Run Code Online (Sandbox Code Playgroud)

c# exception-handling

85
推荐指数
3
解决办法
4万
查看次数

什么可以导致重置一个callstack(我正在使用"throw",而不是"throw ex")

我一直认为"throw"和"throw ex"之间的区别在于单独抛出并没有重置异常的堆栈跟踪.

不幸的是,这不是我正在经历的行为; 这是一个复制我的问题的简单示例:

using System;
using System.Text;

namespace testthrow2
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                try
                {
                    throw new Exception("line 14");
                }
                catch (Exception)
                {
                    throw; // line 18
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());

            }
            Console.ReadLine();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望这段代码能够从第14行开始打印一个callstack; 然而,callstack从第18行开始.当然,它在样本中没什么大不了的,但在我的实际应用中,丢失初始错误信息是非常痛苦的.

我错过了一些明显的东西吗 有没有其他方法来实现我想要的(即重新抛出异常而不丢失堆栈信息?)

我正在使用.net 3.5

.net c# exception-handling exception stack-trace

25
推荐指数
2
解决办法
7102
查看次数

Catch vs Catch(例外e)和Throw vs Throw e

这两个代码示例是否相同?Catch and Catch(Exception e)具有相同的输出,如果我写ThrowThrow e,结果也是相同的.

主要:

try
{
    A();
    //B();
}
catch (Exception e)
{
    Console.WriteLine("{0} exception caught.", e);
}
Run Code Online (Sandbox Code Playgroud)

代码1:

static void A()
{
    try
    {
        int value = 1 / int.Parse("0");
    }
    catch (Exception e)
    {
        throw e;
    }
}
Run Code Online (Sandbox Code Playgroud)

代码2:

static void A()
{
    // Rethrow syntax.
    try
    {
        int value = 1 / int.Parse("0");
    }
    catch
    {
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# try-catch

24
推荐指数
2
解决办法
6万
查看次数

如何在不重置堆栈跟踪的情况下抛出异常?

这是一个后续问题,"throw"和"throw ex"之间有区别吗?

有没有办法提取新的错误处理方法而不重置堆栈跟踪?

[编辑] 我将尝试"内部方法"和Earwicker提供的另一个答案,看看哪一个可以更好地标记答案.

.net c# error-handling exception-handling stack-trace

21
推荐指数
4
解决办法
2万
查看次数

使用.net中的SmtpClient发送邮件

我无法使用smtp客户端发送邮件.这是代码:

SmtpClient client=new SmtpClient("Host");
client.Credentials=new NetworkCredential("username", "password");
MailMessage mailMessage = new MailMessage();
mailMessage.from="sender@gmail.com";
mailMessage.To.Add("recipient@gmail.com");
mailMessage.body="body";
mailMessage.subject="subject";
client.Send(mailMessage);
Run Code Online (Sandbox Code Playgroud)

问题是,当我在ASP.NET应用程序中使用此代码时,我不会收到任何邮件.在asp.net中,我将从邮件地址更改为NetworkCredential中给出的用户名,我收到邮件.

但是在C#windows应用程序中,即使发件人的电子邮件地址无效,我也可以收到电子邮件.

.net c# asp.net smtpclient

21
推荐指数
3
解决办法
9万
查看次数

在C++中,"throw"和"throw ex"之间有区别吗?

我想问这个问题(也在这里),但这次是关于C++的.

C++之间的区别是什么?

try { /*some code here*/}
catch(MyException& ex)
{ throw ex;} //not just throw
Run Code Online (Sandbox Code Playgroud)

try {  /*some code here*/}
catch(MyException& ex)
{ throw;} //not throw ex
Run Code Online (Sandbox Code Playgroud)

它只是在堆栈跟踪中(在C++中,在任何情况下都不是C#或Java中的标准)?

(如果它有任何区别,我使用MSVS 2008.)

c++ exception-handling

18
推荐指数
4
解决办法
5658
查看次数

c#.net中throw和throw ex之间的差异

谁能告诉我throwthrow ex简短的区别?我读过那个throw存储以前的异常,没有得到这一行.
我能举例说明这个吗?

c# throw

9
推荐指数
2
解决办法
3万
查看次数

在堆栈跟踪中使用正确的行号重新抛出异常

您显然能够在不丢弃.NET中的堆栈跟踪的情况下重新抛出异常.

但它似乎没有起作用.

因此我遵循的基本用法是:

    [WebMethod]
    public void ExceptionTest()
    {
        try
        {
            throw new Exception("An Error Happened");
        }
        catch (Exception ex)
        {
            evlWebServiceLog.WriteEntry(ex.ToString(), EventLogEntryType.Error);
            throw;
        }
    }
Run Code Online (Sandbox Code Playgroud)

问题是,行中的行中的throw;行号,而不是原始throw new行.

我在一个简单的exe项目中测试了它,没有登录到Windows日志行.它没有任何区别,堆栈跟踪总是包含错误的行号,使其不太有用.

它为什么这样做?我该怎么做?

.net c# throw

8
推荐指数
2
解决办法
1676
查看次数