【问题标题】:Throwing an exception in c# [duplicate]在c#中抛出异常[重复]
【发布时间】:2011-04-20 07:19:56
【问题描述】:

可能重复:
how to use Java-style throws keyword in C#?

我现在正在实习,正在做 c#。我距离完成主要学习 Java 的大学还有 1 年的时间。

如果我要在 Java 中抛出一个已检查的异常,我会使用:

public void saveToFile(String fileName) throws IOException

除了我自己的自定义异常之外,C# 中是否有类似的语法?

谢谢

【问题讨论】:

    标签: c# java exception exception-handling


    【解决方案1】:

    在 c# 中,您无需声明函数可能抛出的异常。你定期声明一个函数:

    public void saveToFile( string fileName ) {
        ....
    }
    

    抛出异常非常容易。有很多预定义的异常(如 System.IO.IOException),你可以抛出:

    using System.IO
    
    ...
    
    public void saveToFile(* string fileName ) {
    
        ...
        throw new IOException( )
    }
    

    如果你想抛出一个自定义异常,你必须声明它,并确保它派生自 System.Exception 类。您的异常类可以具有您想要的任何构造函数、属性或成员。例如

    public class MyException :Exception
    {
        public int code { get; set; }
        public MyException(int c) { code = c; }
    }
    

    然后,在您的代码中,您只需抛出它的一个实例:

    ...
    throw new MyException( 666 );
    

    【讨论】:

    • 并可能覆盖异常类中的 ToString ;)
    【解决方案2】:

    不。你只需要catchthrow。或者将其包装成一个新的异常和throw

    public void saveToFile(string fileName)
    {  
        try
        {
            // your code
        }
        catch(Exception ex)
        {
            throw;
            //or: throw new Exception("Whoops", ex);
        }
    }
    

    【讨论】:

    • 啊,不。永远不要这样做throw ex。只需throw; 就足够了。如果重新抛出 ex,则会丢失堆栈跟踪。
    • @Mike,好点子!修改了代码。
    猜你喜欢
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多