2014-11-04 25 views

risposta

11

È 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) 
5

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 
    ..... 
+0

Ho provato prima, ottengo un riferimento oggetto non impostato su un'istanza di un oggetto. – Medise

+0

@Medise: quindi inizializza l'elenco. 'Public lsAuthors As New List (Of String)' –

+0

Che sbaglio dannato ho fatto, che ha funzionato, grazie. – Medise

2

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

0

È 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 
Problemi correlati