如何使用基于C#中自定义异常构造的函数抛出自定义异常?

问题描述:

我有一个自定义Exception构造,我想抛出自定义异常使用函数而不是使用throw new ExceptionName("msg")。 我读了Best practices for exceptions,我成功地使用了VB而不是C#如何使用基于C#中自定义异常构造的函数抛出自定义异常?

这是我的自定义构建:

[Serializable()] 
    public class ArtCoreExceptions : Exception 
    { 
     public ArtCoreExceptions() 
     { 
     } 

     public ArtCoreExceptions(string message) 
     : base(message) 
     { 
     } 

     public ArtCoreExceptions(string message, Exception inner) 
     : base(message, inner) 
     { 

     } 
     protected ArtCoreExceptions(System.Runtime.Serialization.SerializationInfo info, 
     System.Runtime.Serialization.StreamingContext context) 
     { } 
    } 

我试图做这样定义一个函数:

UploadFailureException ArtCoreExceptions() 
    { 
     string description = "My NewFileIOException Description"; 

     return new ArtCoreExceptions(description); 
    } 

但是编译器给了我丢失的引用错误 “UploadFailureException”

背景

VB我曾经做到以下几点:

Public Class ArtCoreExceptions 
     Inherits Exception 
     Public Sub New() 
     End Sub 
     Public Sub New(message As String) 
      MyBase.New(message) 
     End Sub 
     Public Sub New(message As String, inner As Exception) 
      MyBase.New(message, inner) 
     End Sub 

     Public Sub New(ByVal info As SerializationInfo, context _ 
    As StreamingContext) 
      MyBase.New(info, context) 
     End Sub 

    End Class 

    Public Function UploadFailureException() As ArtCoreExceptions 
     Dim description As String = "File could not be uploaded" 
     Return New ARTSQLExceptions(description) 
    End Function 

而且我以前throw UploadFailureException作为例外,我该怎么做相同的C#

+1

你有没有考虑建立从ArtCoreExceptions衍生_“公共类UploadFailureException一个UploadFailureException类:ArtCoreExceptions {公共UploadFailureException( ):base(“文件无法上传”){}}“_ - 您可能能够处理特定的异常,而不是具有泛型异常,并且堆栈跟踪的顶部将始终引用异常点而不是以下函数调用。 – PaulF

你搞砸了这里。 UploadFailureException是方法的名称(或函数,无论你喜欢叫什么),而ArtCoreExceptions是类名称。

ArtCoreExceptions UploadFailureException() 
    { 
     string description = "My NewFileIOException Description"; 

     return new ArtCoreExceptions(description); 
    } 
+0

@HimBromBeere,@Niladri ....我得到这个错误'一个命名空间不能直接包含成员,如字段或方法' – JSON

+2

@AhmadAbuMaizar你必须把这个方法放到一个类中,就像你的VB代码那样方法属于'ArtCoreExceptions'类 – HimBromBeere

+0

新手错误.... – JSON

我假设你想回报ArtCoreExceptions。方法签名中的返回值来自之前的它的名字,而不是之后的它。

ReturnType MethodName(params) { ... } 

相较于VB你写的函数的名称 it's返回类型:

Function MethodName() As ReturnType 

所以使用ArtCoreExceptions UploadFailureException() {...}代替。

Public Function UploadFailureException() As ArtCoreExceptions 
     Dim description As String = "File could not be uploaded" 
     Return New ARTSQLExceptions(description) 
    End Function 

这上面的代码建立的函数UploadFailureException(),其返回类型是类型ArtCoreExceptions的对象。你可以做同样的在C#如下

public ArtCoreExceptions UploadFailureException() 
    { 
     string description = "My NewFileIOException Description"; 

     return new ArtCoreExceptions(description); 
    } 

返回从派生类ArtCoreExceptions的实例System.Exception.