#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), который вы получаете.
Я заметил, что ваш стандартный массив должен быть объявлен на уровне класса, а не на уровне метода, чтобы быть доступным другими методами.