2015-05-21 34 views
2

我不是一個職業,我自己學習一些編碼規則。 我開始於vba,現在我正在接近vb.net,但我的知識很差。VB.net邏輯來捕捉函數中的錯誤

我寫了這個函數從記錄集(對數據庫的查詢)中提取一列,並將其放入字符串的哈希集。

嘗試在錯誤的號碼欄的處理錯誤,我使用的這些標準:

1)宣佈「mErr」作爲調用該函數代碼boolean;

2)發送「mErrbyRef給函數;

3)發生錯誤時:將mErr更改爲true並將mHash插入空字符串。

Public Function RSCol(ByVal mRS As Object, ByVal mCol As Byte, ByRef mErr As Boolean) 
    Dim i As Long 
    Dim mHash As New HashSet(Of String) 
    If mRS.GetUpperBound(0) < mCol Then 
     mErr = True 
     mHash.Add("") 
     Return mHash 
     Exit Function 
    End If 
    For i = 0 To mRS.GetUpperBound(1) 
     mHash.Add(mRS(mCol, i)) 
    Next 
    Return mHash 
End Function 

它似乎工作,但我認爲不是一個好的編碼,我想提高我的編碼技能。

每一個建議表示讚賞。

+0

那麼理想做錯誤的管理,你應該用'的try/catch/finally'statements工作,並從用戶拋出異常定義的功能。 –

+0

@Bartdude謝謝,但我不明白如何告訴調用代碼,功能失敗,更優雅/功能代碼 – genespos

+0

我不知道如何比我以前的評論更好地說,優雅的方式是扔一個例外... –

回答

1

在您的代碼:

Exit Function不可達由於Return語句上述 Exit Function函數將控制了傳送到 功能。

更多的功能應該返回一個值,否則你會得到一個 警告。在這種情況下,您可以使用Sub

您的代碼可以

Public Function RSCol(ByVal mRS As Object, ByVal mCol As Byte, ByRef mErr As Boolean) As HashSet(Of String) 
     Dim loopCounter As Long 
     Dim mHash As New HashSet(Of String) 
     Try 
      If mRS.GetUpperBound(0) < mCol Then 
       Throw New Exception("") 
      End If 
      For loopCounter = 0 To mRS.GetUpperBound(1) 
       mHash.Add(mRS(mCol, loopCounter)) 
      Next 
     Catch ex As Exception 
      mHash.Add(ex.ToString()) 
     End Try 
     Return mHash 
    End Function 

你可以參考試試..詳細Click Here 動機構更多關於Exceptions

因爲我注意到,您的命名約定好可憐,我建議你通過這個article by Microsoft

+0

謝謝,您的評論讓我明白了try/catch的邏輯以及異常是如何工作的。只有幾個問題:在調用代碼中,爲了理解該函數失敗,我需要檢查返回的字符串?將它正確地插入一個錯誤消息到哈希集,以檢查它是否包含錯誤? – genespos

0

您可以使用例外來控制函數的錯誤。當你發現的東西是你的函數中走錯了,你把它:

if (something) then 'check if something bad happened 
    Throw New Exception("X has occurred") 
end if 

然後,當這個函數拋出此異常,你應該抓住它想:

try 
    ' Code with the call to the function which throws the exception 
catch excp as Exception 
    'Your control code for this situation, as example just show it 
    MessageBox.show(excp.Message) 
end 
0

去回答之前,你的問題讓我清楚兩兩件事:

  1. 錯誤
  2. 異常

異常是那些可以在運行時處理,而 錯誤無法處理。

有效處理異常/錯誤總是一個好習慣。

來吧Try-Catch-Throw爲我們的救援。

基本語法:

Try 
    ' Do something in here that 
    ' might raise an error. 
    Catch 
    ' Handle exceptions that occur within 
    ' the Try block, here. 
    Finally 
    ' Perform cleanup code in here. 
    End Try 

嘗試:try塊標識的代碼塊爲哪個特定異常將被激活。緊接着是一個或多個Catch塊。

Catch:程序在程序中需要處理問題的位置捕獲異常處理程序。 Catch關鍵字指示捕獲異常。

終於:Finally塊用於執行給定的一組語句,不論是拋出異常還是不拋出異常。例如,如果您打開一個文件,無論是否引發異常,它都必須關閉。

:程序在出現問題時拋出異常。這是使用Throw關鍵字完成的。

如果你沒有得到程序也任何異常,建議使用try catch塊