blueye89 Ответов: 1

Функция 'fnc' не возвращает значение


Привет всем,
Может ли кто-нибудь сказать мне, почему я получаю это предупреждение и как его решить?
Код работает нормально, но я хотел бы знать, как избежать подобных предупреждений в будущем.

Public Function GetPropertyValue(objBlockRef As AcadBlockReference, propName As String) As Object
        Dim iProp As Long
        Dim dybprop As Object

        If objBlockRef.IsDynamicBlock Then '<--| if the passed block reference is a dynamic block one
            dybprop = objBlockRef.GetDynamicBlockProperties '<--| get its dynamic properties
            For iProp = LBound(dybprop) To UBound(dybprop) '<--| iterate through them properties
                With dybprop(iProp)
                    If .PropertyName = propName Then '<--| if the current property matches the passed name
                        GetPropertyValue = .Value '<--| return its value
                        Exit Function
                    End If
                End With
            Next
        End If

    End Function


Что я уже пробовал:

- Понятия не имею. Я попытался использовать "return" для имени функции.

1 Ответов

Рейтинг:
4

Dave Kreskowiak

У тебя нет ни одного Return заявление в любом месте. Это не VB6 или VBScript.

Фактическое заявление о возврате должно быть там, и в соответствующем месте. Если вы замените GetPropertyValue = .Value с помощью оператора Return вы получите еще одну ошибку: "не все пути кода возвращают значение."

Итак, перепишите функцию

Public Function GetPropertyValue(objBlockRef As AcadBlockReference, propName As String) As Object
    Dim iProp As Long
    Dim dybprop As Object
    Dim returnValue As Object = Nothing

    If objBlockRef.IsDynamicBlock Then '<--| if the passed block reference is a dynamic block one
        dybprop = objBlockRef.GetDynamicBlockProperties '<--| get its dynamic properties
        For iProp = LBound(dybprop) To UBound(dybprop) '<--| iterate through them 
properties
            ' The With was completely unnecessary.
            If dybprop(iProp).PropertyName = propName Then '<--| if the current property matches the passed name
                returnValue = dybprop(iProp).Value '<--| return its value
                Exit For
            End If
        Next
    End If

    Return returnValue
End Function


blueye89

Предупреждение BC42104 переменная 'returnValue' используется до того, как ей было присвоено значение. Исключение нулевой ссылки может возникнуть во время выполнения.

Dave Kreskowiak

Тот Dim returnValue As Object надо было читать Dim returnValue As Object = Nothing.

blueye89

Решено! Спасибо!