Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何显示我自己的异常?_C#_Asp.net_Custom Exceptions - Fatal编程技术网

C# 如何显示我自己的异常?

C# 如何显示我自己的异常?,c#,asp.net,custom-exceptions,C#,Asp.net,Custom Exceptions,我正在开发一个web项目,需要在其中添加自定义异常类。例如,当会话超时时,如何显示自定义异常类中的消息?请帮忙。任何样品都会有帮助 这是我目前在exception类中编写的内容: public class CustomException : Exception { private string message; public CustomException () { this.message = "Invalid Query"; } pu

我正在开发一个web项目,需要在其中添加自定义异常类。例如,当会话超时时,如何显示自定义异常类中的消息?请帮忙。任何样品都会有帮助

这是我目前在exception类中编写的内容:

public class CustomException : Exception
{
    private string message;

    public CustomException ()
    {
        this.message = "Invalid Query";
    }
    public CustomException (String message)
    {
        this.message = message;

    }

}

需要知道如何将其与会话超时联系起来,从这里我需要编写相同的逻辑。谢谢。

您可能希望将此作为

public CustomException() : base("Invalid Query") { }
这样,异常消息就可以正确地传递给另一个构造函数

public CustomException(String message) : base(message) { }

这样,您就不需要私有字符串消息字段。

如果您希望在引发时抛出自定义的
异常,您可以这样做

try {
    DataTable dt = q.ExecuteQuery(); //This throws a timeout.
} catch(SessiontTimeoutException ste) {
    throw new CustomException("Session has timed out");
} catch(Exception e) {
    //Show unexpected exception has occured
}
不太确定这是否是您想要做的。
更新:

要了解SqlException是否是TimeoutException,请参阅此

SqlException类公开了SqlError对象集合的属性。您可以查询与
master.dbo.sysmessages
表中的条目对应的每个错误对象的属性。

我建议您使用
内部异常
获取用户友好的异常消息以及系统错误消息。如果获取
MyException
,您将在
MyException.ToString()
处看到异常消息和系统异常消息

此外,如果您关心编码异常,可以使用VS的代码段功能。只需键入“Exception”并按TAB键两次,VS就会创建Exception类,如下代码所示

try
{
    DataTable dt = q.ExecuteQuery(); //This throws a timeout.
}
catch (SessiontTimeoutException ex)
{
    throw new MyException("my friendly exception message", ex);
}

[Serializable]
public class MyException : Exception
{
    public MyException() { }
    public MyException(string message) : base(message) { }
    public MyException(string message, Exception inner) : base(message, inner) { }
    protected MyException(
      System.Runtime.Serialization.SerializationInfo info,
      System.Runtime.Serialization.StreamingContext context)
        : base(info, context) { }
}

谢谢你的回复。如果我正在编写类似dt=q.ExecuteQuery()的代码;在一个try块中,my exception类如何知道抛出的异常是否是会话超时异常,以便显示消息。如果是自定义异常,您应该自己抛出,应该让ExecuteQuery()(除非您自己编写)抛出相应的异常。如果它是由您抛出的,只需捕获(CustomException e),这意味着。我必须在应用程序代码本身中检查会话超时…而不是在exception类中。是的,您应该捕获SessionTimeoutException或通过将其作为“参数”来调用的任何内容对于Catch,当会话超时时,为什么要抛出自定义异常?我试图在执行层a的查询时返回批量数据,而在层a的会话超时时返回null。它不会在层A上显示任何错误。因此我需要使用自定义异常。您应该(几乎)始终将原始异常作为内部异常包括在内:
抛出新的自定义异常(“会话已超时”,ste)
@Dan Puzey,同意。关于此问题的信息越多越好。此SessionTimeoutException是什么?找不到相同的指令。??我从你的帖子上拿的。您是在谈论TimeoutException、SQL TimeoutException还是实际的Asp.net会话超时异常?您会得到很多。System.Data.SqlClient.SqlException:超时已过期。