2011-07-18 13 views
8

Solo quiero saber si hay un enfoque en VB.NET que pueda encontrar si existe un valor específico en una lista o algo que pueda usarse en mi condición If-else. Lo que estoy haciendo ahora es utilizar esto:VB.NET If-Else en la lista

If ToStatus = "1CE" Or ToStatus = "2TL" Or ToStatus = "2PM" Then 
    'Do something 
Else 
    'Do something 
End If 

Esto funciona bien, pero ¿si tengo cientos de cadena a comparar a ToStatus en el futuro? ¡Será una pesadilla! Ahora, si tal funcionalidad existe, ¿cómo puedo agregar "Y" y "O" en la declaración?

¡Gracias de antemano!

+0

'ToStatus' nunca será igual a' 1CE' y '2TL'. – SLaks

+0

@SlaKs - ¡ahora lo hará! :) – dpp

+0

Luego desea verificar si está _no_ en una lista. – SLaks

Respuesta

18

Usted puede utilizar la función Contains:

Dim someList = New List(Of String) From { ... } 
If Not someList.Contains(ToStatus) Then 
+0

¿Podrían decirme qué paquete debería incluir para que 'List' funcione? – dpp

+0

'List (Of T)' es parte del núcleo BCL, en 'System.Collections.Generic' en mscorlib.dll. – SLaks

+0

Oye, sé que esta es una pregunta diferente, pero ¿puedo crear una instancia de 'List (Of T)' sin usar '.add (" My String ")'? Me refiero a ponerlos en el constructor? 'Porque mi verdadero objetivo es minimizar los códigos que estoy escribiendo. – dpp

4

se puede usar select caso

select case A 
    case 5,6,7,8 
     msgbox "you are in" 
    case else 
     msgbox "you are excluded" 
end select 
0

para .NET 2.0

me encontré con otro problema donde la solución SLaks ganó' t trabajo, eso es si usa .NET 2.0 donde el método Contains no está presente. Así que aquí está la solución:

If (Array.IndexOf(New String() {"1CE", "2TL", "2PM"}), ToStatus > -1) Then 
    'Do something if ToStatus is equal to any of the strings 
Else 
    'Do something if ToStatus is not equal to any of the strings 
End If 

VB.NET - Alternative to Array.Contains?

3

Como Slaks pointed out, puede utilizar Contains en una colección enumerable. Pero creo que la legibilidad sufre. No me importa si alguna lista contiene mi variable; Quiero saber si mi variable es en alguna lista. Usted puede envolver contiene en un método de extensión de este modo:

Imports System.Runtime.CompilerServices 
Module ExtensionMethods 

    <Extension()> _ 
    Public Function [In](Of T)(ByVal item As T, ByVal ParamArray range() As T) As Boolean 
     Return range.Cast(Of T).Contains(item) 
    End Function 

End Module 

Entonces llaman así:

If ToStatus.In("1CE","2TL","2PM") Then 
-1

eliminar los duplicados de la lista

Dim ListWithoutDuplicates As New List(Of String) 
For Each item As String In ListWithDuplicates 

    If ListWithoutDuplicates.Contains(item) Then 

    ' string already in a list - do nothing 

    Else 

     ListWithoutDuplicates.Add(item) 

    End If 

Next 
4

if {"1CE","2TL","2PM"}.Contains(ToStatus)

continuación . .... Fin I