1 Warning 'ResizeKb'   zodpovězená otázka

VB.NET

Ahoj lidi, na internetu jsem si našel jeden script a trochu ho předělal, jenže to píše neustále nějaký warning a to i v originálním scriptu ...

    Private Function ResizeKb(ByVal b As Double) As String

        Dim bSize(8) As String, i As Integer
        bSize(0) = "Bytes"
        bSize(1) = "KB" 'Kilobytes
        bSize(2) = "MB" 'Megabytes
        bSize(3) = "GB" 'Gigabytes
        bSize(4) = "TB" 'Terabytes
        bSize(5) = "PB" 'Petabytes
        bSize(6) = "EB" 'Exabytes
        bSize(7) = "ZB" 'Zettabytes
        bSize(8) = "YB" 'Yottabytes

        For i = UBound(bSize) To 0 Step -1
            If b >= (1024 ^ i) Then
                ResizeKb = ThreeNonZeroDigits(b / (1024 ^ i)) & " " & bSize(i)
                Exit For
            End If
        Next

    End Function

... ,,End Function je podtrženo zeleně a vypisuje to ,,Function 'ResizeKb' doesn't return a value on all code paths. A null reference exception could occut at run time when the result is used. ...

Zkoušel jsem tam dávat i returny, ae pak bylo podtrženo zeleně ,,ResizeKb

Předem všem díky za jakoukoliv pomoc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Návratovú hodnotu to nastavuje spôsobom používaným vo VB 6 a menšiom, čo je považované za zastaralé.Skúste použiť kľúč. slovo Return .

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To je pravda, ale tento problém je to, že hodnota se nevrací ve všech větvích programu. Například pokud bude b < (1024 ^ i), nevrátí se nic a proto může dojít k vyjímce ve volajícím kódu.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Děkuji za informace, jen bych poprosil o správný kousek kódu jak to má být, neboli jsem ještě zvyklej na programování v Pawn jazyku, které je podobný C++ a return jsem používal pouze u některých funkcí ...

Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Kód byl upraven

    Private Function ResizeKb(ByVal b As Double) As String

        Dim bSize(8) As String, i As Integer
        bSize(0) = "Bytes"
        bSize(1) = "kB" 'Kilobytes
        bSize(2) = "MB" 'Megabytes
        bSize(3) = "GB" 'Gigabytes
        bSize(4) = "TB" 'Terabytes
        bSize(5) = "PB" 'Petabytes
        bSize(6) = "EB" 'Exabytes
        bSize(7) = "ZB" 'Zettabytes
        bSize(8) = "YB" 'Yottabytes

        For i = UBound(bSize) To 0 Step -1
            If b >= (1024 ^ i) Then
                ResizeKb = ThreeNonZeroDigits(b / (1024 ^ i)) & " " & bSize(i)
                Exit For
            Else
                ResizeKb = "0 kB"
                Exit For
            End If
        Next

    End Function

Jen bych poprosil jak mám kód upravit, aby to jži nepsalo ten warning.

Předem díky všem

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Hezký den,

já bych využil Return

    Private Function ResizeKb(ByVal b As Double) As String

        Dim bSize(8) As String, i As Integer
        bSize(0) = "Bytes"
        bSize(1) = "kB" 'Kilobytes
        bSize(2) = "MB" 'Megabytes
        bSize(3) = "GB" 'Gigabytes
        bSize(4) = "TB" 'Terabytes
        bSize(5) = "PB" 'Petabytes
        bSize(6) = "EB" 'Exabytes
        bSize(7) = "ZB" 'Zettabytes
        bSize(8) = "YB" 'Yottabytes

        For i = bSize.Length - 1 To 0 Step -1
            If b >= (1024 ^ i) Then
                Return ThreeNonZeroDigits(b / (1024 ^ i)) & " " & bSize(i)
            End If
        Next
        Return "0 kB"
    End Function

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ve VB.NET lze asi použít bez nějakých varování i jako návrat z funkce název funkce. Zkoušel jsem to a nic to nehlásí.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ve VB jsou povolené obě varianty, rozdíl je ten, že přiřazení do názvu funkce jen nastaví návratovou hodnotu, ale funkce tím nekončí a provádí se další příkazy.

Return vrátí a okamžitě z funkce vyskočí.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky všem, už mi to nehází žádná varování.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback