Не понимаю, почему эта функция не вызывается?

#vb.net #function

#vb.net #Функция

Вопрос:

Я пытаюсь вызвать эту функцию в процедуру и не понимаю, почему это не работает, я посмотрел, как форматировать вызов функции, и не понимаю своих ошибок.

 Structure Stock
    Dim category As String
    Dim price As Integer
    Dim size As String
    Dim sku As String
    Dim color As String
End Structure

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim stockArray() As String =
        IO.File.ReadAllLines("stockInventory.txt")
End Sub

Private Sub btnNewSave_Click(sender As Object, e As EventArgs) Handles btnNewSave.Click
    Dim answer
    answer = check(sku, stockArray)

End Sub

Function check(sku, stockArray) As Boolean
    Dim flag As Boolean
    Dim numVar = -1

    numVar = Array.IndexOf(stockArray, txtSKU.Text)

    If numVar = -1 Then
        flag = False
    End If

    If numVar <> -1 Then
        flag = True
    End If

    Return flag
End Function
 

Это выдает мне сообщение об ошибке,

Артикул не объявлен. Он может быть недоступен из-за его уровня защиты

У меня есть структура, в которой sku определяется как строка. Должен ли я снова объявить ее в этом подразделе, чтобы она работала?

Комментарии:

1. что значит «не вызывает»? Вы прошли через отладчик Visual Studio, чтобы запустить каждую строку и посмотреть, вызывается ли функция или нет? Если нет, то что происходит вместо этого? Может быть, исключение? Пожалуйста, четко представляйте, что на самом деле происходит при запуске кода, и любые ошибки, которые вы получаете. Если вы не использовали для этого отладчик, пожалуйста, сделайте это сейчас, прежде чем отвечать. Помимо того факта, что я не вижу, где sku и stockArray были определены до того, как вы запустили answer = check(sku, stockArray) (вы оставили какой-то соответствующий код вне вопроса ??), Я не вижу в этом ничего плохого.

2. @ADyson выдает сообщение об ошибке: «Артикул не объявлен. Это может быть недоступно из-за его уровня защиты» У меня есть структура, в которой sku определяется как строка. Должен ли я снова объявить ее в этом подразделе, чтобы она работала?

3. Возможно. Это зависит от того, где вы ее объявили. Или, возможно, вам просто нужно изменить ее модификатор доступа. P.S. в будущем, если вы получите сообщение об ошибке (это ошибка компилятора, поэтому вы должны были сразу ее увидеть), добавьте его в вопрос с самого начала. Ошибки — это важные подсказки, а не второстепенные детали.

4. @ADyson Это объявлено в форме, я бы подумал, что это приведет к глобализации его доступности

5. Но что касается исходной ошибки, вам, вероятно, следует прочитать о том, как на самом деле использовать структуру и значение внутри нее: docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide /… . Вот простой пример того, как использовать структуру, подобную той, которую вы создали: dotnetfiddle.net/ltlWDf . Вы не можете а) использовать структуру, не назначив сначала ее экземпляр переменной, или б) случайным образом ссылаться на свойства внутри структуры вне контекста. Вы просто использовали «sku», как если бы это была самостоятельная переменная, но это не так.

Ответ №1:

Вы можете немного доработать этот код:

 Function check(ByVal stockArray as String()) As Boolean
    Return Array.IndexOf(stockArray, txtSKU.Text) >= 0
End Function
 

Он вернется, если элемент находится в массиве.

Если ваш файл очень, очень большой, и вы выполняете много поисковых запросов, я рекомендую хранить его в HashSet вместо массива, чтобы получить поиск O (1) вместо O (n), который вы получаете.

Я заметил, что ваш стандартный массив должен быть объявлен на уровне класса, а не на уровне метода, чтобы быть доступным другими методами.