#vb.net
#vb.net
Вопрос:
Я создал новый список string, и когда я пытаюсь что-то добавить туда, он выдает ошибку: аргумент ‘Prompt’ не может быть преобразован в тип ‘string
Мой код:
Dim variables As New List(Of String)
Try
variables.Append(CStr(TextBox1.Text))
variables.Append(CStr(TextBox2.Text))
MsgBox(variables)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Как я могу это исправить?
Комментарии:
1. Какой смысл преобразовывать a
String
в aString
? ИспользуетсяCStr
для преобразования или приведения чего-либо к типу или какString
.Text
Свойство элемента управления уже имеет типString
, так чего же вы добиваетесь?
Ответ №1:
Ошибка возникает из-за вашего использования MsgBox()
. Вы передаете ему variables
переменную, и он не знает, как преобразовать a List(Of String)
в a String
.
Как указано jmcilhinney, вы должны использовать Add()
вместо Append()
.
Кроме того, вы должны использовать MessageBox.Show()
вместо MsgBox()
.
Что касается ошибки, мы можем только предположить, что вы хотите увидеть все текущие значения в вашем списке? Если это так, одним из решений является использование String.Join()
и отображение этого вместо:
Dim variables As New List(Of String)
variables.Add(TextBox1.Text)
variables.Add(TextBox2.Text)
MessageBox.Show(String.Join(",", variables))
Но ваш variables
список должен быть объявлен на уровне формы, чтобы вы не создавали каждый раз новый. Из вашего сообщения неясно, так это или нет.
Ответ №2:
Вы должны вызывать метод Add
экземпляра вашего List(Of String)
. Append
является методом расширения и не подходит в этом сценарии. Append
будет использоваться для перечислимого списка, который вы хотели бы перечислить на месте, например
Dim names = {"Peter", "Paul", "Mary"}
Dim pNames = names.Where(Function(name) name.StartsWith("P"))
For Each pName In pNames.Append("Philip")
Console.WriteLine(pName)
Next
В этом случае Append
влияет только на список, перечисляемый циклом, в котором он используется. Исходный список не изменяется.
Комментарии:
1. Если это не сработало, значит, вы сделали это неправильно. Если вы не покажете нам, что вы сделали, мы не сможем сказать вам, что в этом не так.
2. @jmcihinney я пытаюсь создать способ создания динамически переменных
3. На самом деле не имеет значения, какова ваша мотивация. Вы спросили, как сделать что-то конкретное, и я рассказал вам, как это сделать. Если вы сделаете то, что я сказал, тогда ваш код будет работать, по крайней мере, до добавления указанных элементов в этот список. Если у вас есть другой вопрос, возможно, вам следует опубликовать этот вопрос вместо того, чтобы помечать его в комментарии к ответу.
Ответ №3:
Вы должны использовать Add
метод:
Dim variables As List(Of String) = New List(Of String)
variables.Add(TextBox1.Text)
(Нет необходимости в избыточном CStr
, поскольку TextBox1.Text
он уже имеет тип String
.)
Как, несомненно, предложит @Mary — правильно! — всегда иметь Option Explicit
и Option Strict
устанавливать значение On (и, на мой взгляд, Option Infer
Off); это поможет вам с любыми проблемами синтаксиса.
И всегда обращайте внимание на предложения синтаксиса / компилятора на левом поле, которые дадут вам подсказки / подсказки для исправления или улучшения вашего кода.
Наконец, обратитесь к документации Microsoft, если сомневаетесь. Это должен быть ваш первый порт вызова, если вы ни в чем не уверены.
Ответ №4:
Как упоминали несколько человек, используйте .Добавить метод нет .Добавить.
The .Свойство Text текстового поля уже является строкой. Нет необходимости преобразовывать с помощью CStr().
В окне сообщения отображается строка. переменные — это не строка; это список (строки). Чтобы увидеть, что находится в вашем списке, используйте для каждого цикла.
Private Sub OpCode()
Dim variables As New List(Of String)
variables.Add(TextBox1.Text)
variables.Add(TextBox2.Text)
For Each s In variables
MsgBox(s)
Next
End Sub
@SteveCinq правильно :-); включите параметр Strict .