2010-10-13 16 views
44

tengo este código:encontrar si existe un número entero en una lista de números enteros

List<T> apps = getApps(); 

     List<int> ids; 

     List<SelectListItem> dropdown = apps.ConvertAll(c => new SelectListItem 
     { 
      Selected = ids.Contains(c.Id), 
      Text = c.Name, 
      Value = c.Id.ToString() 
     }).ToList(); 


ids.Contains 

parece volver siempre falsa a pesar de que los números no coinciden

alguna idea?

+9

No, eso es más o menos la forma de hacerlo. – mquander

+0

mquander tiene razón; quizás pueda probar un pequeño ejemplo como List foo = new List (); for (int i = 0; i <10; ++ i) {foo.Add (i); } Console.WriteLine (foo.Contains (2)); –

+0

Supongo que tienes un error en otro lugar. Ese enfoque DEBERÍA funcionar. –

Respuesta

68

Si sólo necesita un resultado verdadero/falso

bool isInList = intList.IndexOf(intVariable) != -1; 

si el intVariable no existe en la Lista devolverá -1

+1

'IndexOf' está basado en cero. Eso debería ser '> = 0' :) –

+5

O simplemente debería verificar'! = -1' ya que el valor de retorno -1 se define como el resultado negativo. –

+0

gracias por los comentarios, puntos positivos –

45

Mientras que su lista se inicializa con valores y ese valor de hecho existe en la lista, entonces Contiene debe devolver verdadero.

He intentado lo siguiente:

var list = new List<int> {1,2,3,4,5}; 
var intVar = 4; 
var exists = list.Contains(intVar); 

Y existe es de hecho el valor true.

+0

OP ha actualizado su pregunta a la que responde. su lista de ids no parece estar inicializada. ¿No debería ser eso una captura del compilador? –

+0

Sí. Una lista no inicializada debería causar un error de compilación. Pero no si la lista se define a nivel de clase, entonces se inicializará a nulo y el compilador estará contento. –

3

La forma en que lo hizo es correcta. Funciona bien con ese código: x es verdadero. probablemente cometió un error en otro lugar.

List<int> ints = new List<int>(new[] {1,5,7}); 
var i = 5; 
var x = ints.Contains(i); 
0

Debería estar haciendo referencia a Selected no ids.Contains como la última línea.

Me acabo de dar cuenta de que se trata de un problema de formato, desde el OP. Independientemente de que deba hacer referencia al valor en Seleccionado. Recomiendo agregar algunas llamadas Console.WriteLine para ver exactamente qué se está imprimiendo en cada línea y también cuál es cada valor.

Después de su actualización: ids es una lista vacía, ¿cómo es que esto no arroja una NullReferenceException? Como nunca se inicializó en ese bloque de código

3

Aquí hay un método de extensión, esto permite la codificación como el comando SQL IN.

public static bool In<T>(this T o, params T[] values) 
{ 
    if (values == null) return false; 

    return values.Contains(o); 
} 
public static bool In<T>(this T o, IEnumerable<T> values) 
{ 
    if (values == null) return false; 

    return values.Contains(o); 
} 

Esto permite cosas por el estilo:

List<int> ints = new List<int>(new[] {1,5,7}); 
int i = 5; 
bool isIn = i.In(ints); 

O:

int i = 5; 
bool isIn = i.In(1,2,3,4,5); 
1
bool vExist = false; 
int vSelectValue = 1; 

List<int> vList = new List<int>(); 
vList.Add(1); 
vList.Add(2); 

IEnumerable vRes = (from n in vListwhere n == vSelectValue); 
if (vRes.Count > 0) { 
    vExist = true; 
} 
Cuestiones relacionadas