相关疑难解决方法(0)

为什么在C#中捕获并重新抛出异常?

我正在查看文章C# - 可序列化DTO上的数据传输对象.

这篇文章包括这段代码:

public static string SerializeDTO(DTO dto) {
    try {
        XmlSerializer xmlSer = new XmlSerializer(dto.GetType());
        StringWriter sWriter = new StringWriter();
        xmlSer.Serialize(sWriter, dto);
        return sWriter.ToString();
    }
    catch(Exception ex) {
        throw ex;
    }
}
Run Code Online (Sandbox Code Playgroud)

本文的其余部分看起来很合理(对于菜鸟),但是try-catch-throw会抛出一个WtfException ... 这不完全等同于根本不处理异常吗?

人机工程学:

public static string SerializeDTO(DTO dto) {
    XmlSerializer xmlSer = new XmlSerializer(dto.GetType());
    StringWriter sWriter = new StringWriter();
    xmlSer.Serialize(sWriter, dto);
    return sWriter.ToString();
}
Run Code Online (Sandbox Code Playgroud)

或者我错过了C#中错误处理的基本内容?它与Java几乎相同(减去已检查的异常),不是吗?......也就是说,他们都改进了C++.

Stack Overflow问题重新抛出无参数捕获和不执行任何操作之间的区别?似乎支持我的观点,即try-catch-throw是一个无操作.


编辑:

只是为了总结未来发现这个主题的人...

不要

try {
    // Do stuff that might throw an …
Run Code Online (Sandbox Code Playgroud)

c# exception-handling try-catch

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

如何在Kotlin同时捕获许多例外

try { 

} catch (ex: MyException1, MyException2 ) {
    logger.warn("", ex)
}
Run Code Online (Sandbox Code Playgroud)

要么

try { 

} catch (ex: MyException1 | MyException2 ) {
    logger.warn("", ex)
}
Run Code Online (Sandbox Code Playgroud)

结果,编译错误:Unresolved reference: MyException2.

如何在Kotlin上同时捕获许多例外?

kotlin

58
推荐指数
2
解决办法
1万
查看次数

Java 7 - 精确重新抛出最终异常

在以前的java版本中,重新抛出异常被视为抛出catch参数的类型.

例如:

public static void test() throws Exception{
    DateFormat df = new SimpleDateFormat("yyyyMMdd");
    try {
        df.parse("x20110731");
        new FileReader("file.txt").read();
    } catch (Exception e) {
        System.out.println("Caught exception: " + e.getMessage());
        throw e;
    }
}
Run Code Online (Sandbox Code Playgroud)

在Java 7中,如果声明异常,则可以更精确地了解抛出的异常final:

//(doesn't compile in Java<7)
public static void test2() throws ParseException, IOException{
    DateFormat df = new SimpleDateFormat("yyyyMMdd");
    try {
        df.parse("x20110731");
        new FileReader("file.txt").read();
    } catch (final Exception e) {
        System.out.println("Caught exception: " + e.getMessage());
        throw e;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题:文档说我需要声明异常final.但如果我不这样做,上面的代码仍然编译和工作.我错过了什么吗?

参考文献:

项目硬币:多次捕获和最终重新抛出为重新抛出的
异常添加更灵活的检查

java final exception java-7

22
推荐指数
1
解决办法
6232
查看次数

使用finally而不是catch

我现在已经看过这种模式了几次:

        bool success = false;
        try
        {
            DoSomething();
            success = true;
        }
        finally
        {
            if (!success)
                Rollback();
        }
Run Code Online (Sandbox Code Playgroud)

而且我一直在想:为什么这比使用catch回滚更好?

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

确保更改在失败时回滚的两种方法之间有什么区别?

c# transactions try-catch try-finally

11
推荐指数
1
解决办法
621
查看次数

抓住一些例外而忽略其他例外 - 为什么这不起作用?

我有类似的东西.

void func() {
  try {
    //socket disconnects in middle of ..parsing packet..
  } catch(Exception ex) {
   if(!ex.getMessage().toString().equals("timeout") || !ex.getMessage().toString().equals("Connection reset")) {
     debug("Exception (run): " + ex.getMessage());
     ex.printStackTrace();
  }
}
Run Code Online (Sandbox Code Playgroud)

为什么当我得到连接重置异常或超时异常时,它仍然在条件内.我尝试没有toString,没有运气.

java string exception printstacktrace

1
推荐指数
1
解决办法
1689
查看次数

Java,如果我想从函数中返回不同的类型怎么办?

public WHATTOWRITEHERE test()
{
    try
    {
        transaction.begin();
        code which may trigger exception
        transaction.commit();
        return true;
    }
    catch (javax.script.ScriptException ex)
    {
        transaction.rollback();
        return ex.getMessage();
    }
}
Run Code Online (Sandbox Code Playgroud)

打算执行某些操作,如果没有,则返回,true如果没有(发生错误),string则应返回此错误消息.它可以用Php但不能用Java

编辑:考试不能到外面,它必须在这里处理.

java

0
推荐指数
1
解决办法
1378
查看次数