2017-08-30 45 views
-1

我有一個自定義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

回答

1

你搞砸了這裏。 UploadFailureException是方法的名稱(或函數,無論你喜歡叫什麼),而ArtCoreExceptions是類名稱。

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

     return new ArtCoreExceptions(description); 
    } 
+0

@HimBromBeere,@Niladri ....我得到這個錯誤'一個命名空間不能直接包含成員,如字段或方法' – JSON

+2

@AhmadAbuMaizar你必須把這個方法放到一個類中,就像你的VB代碼那樣方法屬於'ArtCoreExceptions'類 – HimBromBeere

+0

新手錯誤.... – JSON

1

我假設你想回報ArtCoreExceptions。方法簽名中的返回值來自之前的它的名字,而不是之後的它。

ReturnType MethodName(params) { ... } 

相較於VB你寫的函數的名稱 it's返回類型:

Function MethodName() As ReturnType 

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

1
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.