webForumDet fria alternativet

felhantering

.NETur .NET

3 svar · 301 visningar · startad av andersl

anderslMedlem sedan juni 200428 inlägg
#1

Funktionen nedan skickar ett kommando till en server och returnerar svaret den får. Om ett exception kastas sparas exceptionmeddelandet i variabeln 'lastError_'. Finns det något bättre sätt att hantera fel, eller duger den här metoden?

Public Function sendCommand(ByVal command As String) As String
            ' Some command doesnt requier user to be logged in
            If isConnected_ Then
                commandCount += 1
                Try
                    Return socketFunctions.SendReceive(commandCount.ToString + " " + command + "" + ControlChars.CrLf, s)
                Catch ex As Exception
                    lastError_ = ex.Message.ToString
                End Try
            End If

            Return Nothing
        End Function
Marcus EMedlem sedan maj 20021 466 inlägg
#2

Vad sägs som att göra det som är brukligt och låta undantaget passera eller kasta ett eget undantag? Om en funktion misslyckas ska ett undantag kastas för att försäkra sig om att funktioner som anropas efteråt inte misslyckas p.g.a. att denna funktion misslyckats.

Kort och gott: Har något gått snett - kasta ett undantag.

GladhMedlem sedan maj 20012 812 inlägg
#3

Generellt så kan jag säga att tänker du inte göra något i din catch() funktion så finns det ingen anledning att den finns. Om du däremot kan förvänta dig ett speciellt fel, som du kan hantera om det uppstår så skall detta fel fångas och då endast detta fel. Så om du kan förvänta dig ett ArgumentOutOfRangeException och du kan hantera detta fel så fångar du endast detta fel och låter övriga fel kastas vidare direkt. Sedan så använder du din catch funktion till att hantera ArgumentOutOffRange felet.

Det finns ingen mening att fånga ett exception object och sedan kasta det vidare direkt. Att spara undan det i en lastError variabel förstår jag inte alls, varför vill du det?

- Magnus

anderslMedlem sedan juni 200428 inlägg
#4

Jag tänkte att det kunde vara bra att stoppa eventuella fel direkt, även om de inte hanteras på ngt sätt.
Det ni säger låter bättre. jag hanterar de fel jag kan förvänta mig direkt och kastar de andra vidare.
// Anders

138 ms totalt · 3 externa anrop · v20260731065814-full.a2ca460b
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)