ho:Verificare se una lista di stringhe contiene un valore
Public lsAuthors As List(Of String)
voglio aggiungere valori a questa lista, ma prima di aggiungere che ho bisogno di controllare se il valore esatto è già in esso. Come lo capisco?
ho:Verificare se una lista di stringhe contiene un valore
Public lsAuthors As List(Of String)
voglio aggiungere valori a questa lista, ma prima di aggiungere che ho bisogno di controllare se il valore esatto è già in esso. Come lo capisco?
È possibile utilizzare List.Contains
:
If Not lsAuthors.Contains(newAuthor) Then
lsAuthors.Add(newAuthor)
End If
o con LINQs Enumerable.Any
:
Dim authors = From author In lsAuthors Where author = newAuthor
If Not authors.Any() Then
lsAuthors.Add(newAuthor)
End If
Si potrebbe anche usare un efficiente HashSet(Of String)
invece della lista che non consente duplicati e restituisce False
in HashSet.Add
se la stringa era già nel set.
Dim isNew As Boolean = lsAuthors.Add(newAuthor) ' presuming lsAuthors is a HashSet(Of String)
L'Elenco generico ha un metodo chiamato Contains che restituisce true se il comparatore predefinito per il tipo scelto trova un elemento che corrisponde ai criteri di ricerca.
per una lista (stringa) questo è il normale confronto di stringhe, in modo che il codice potrebbe essere
Dim newAuthor = "Edgar Allan Poe"
if Not lsAuthors.Contains(newAuthor) Then
lsAuthors.Add(newAuthor)
End If
Come nota a margine, il confronto predefinito per le stringhe considera due stringhe diverso se non hanno lo stesso caso. Quindi, se provi ad aggiungere un autore chiamato "edgar allan poe" e ne hai già aggiunto uno con il nome "Edgar Allan Poe", il barebone Contains non si accorge che sono uguali.
Se si dispone di gestire questa situazione, allora avete bisogno
....
if Not lsAuthors.Contains(newAuthor, StringComparer.CurrentCultureIgnoreCase) Then
.....
per verificare se un elemento è presente in un elenco è possibile utilizzare il metodo list.Contains(). Se si utilizza un pulsante di scatto per popolare l'elenco di stringhe poi vedere il codice:
Public lsAuthors As List(Of String) = New List(Of String) ' Declaration of an empty list of strings
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' A button click populates the list
If Not lsAuthors.Contains(TextBox2.Text) Then ' Check whether the list contains the item that to be inserted
lsAuthors.Add(TextBox2.Text) ' If not then add the item to the list
Else
MsgBox("The item Already exist in the list") ' Else alert the user that item already exist
End If
End Sub
Nota: Linea per linea spiegazione è data come commenti
È possibile ottenere un elenco di elementi corrispondenti di la tua condizione in questo modo:
Dim lsAuthors As List(Of String)
Dim ResultData As String = lsAuthors.FirstOrDefault(Function(name) name.ToUpper().Contains(SearchFor.ToUpper()))
If ResultData <> String.Empty Then
' Item found
Else
' Item Not found
End If
Ho provato prima, ottengo un riferimento oggetto non impostato su un'istanza di un oggetto. – Medise
@Medise: quindi inizializza l'elenco. 'Public lsAuthors As New List (Of String)' –
Che sbaglio dannato ho fatto, che ha funzionato, grazie. – Medise