web-dev-qa-db-fra.com

trouver si un entier existe dans une liste d'entiers

j'ai ce code:

  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

semble toujours retourner faux même si les chiffres correspondent

des idées?

56
leora

Si vous avez juste besoin d'un résultat vrai/faux

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

si la variable int n'existe pas dans la liste, elle retournera -1

86
Bobby Borszich

Tant que votre liste est initialisée avec des valeurs et que cette valeur existe réellement dans la liste, alors la commande Contains doit renvoyer la valeur true.

J'ai essayé ce qui suit:

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

Et existe est en effet mis à la vérité.

68
Rune Grimstad

La façon dont vous avez fait est correcte. Cela fonctionne bien avec ce code: x est vrai. vous avez probablement fait une erreur ailleurs.

List<int> ints = new List<int>( new[] {1,5,7}); // 1

List<int> intlist=new List<int>() { 0,2,3,4,1}; // 2

var i = 5;
var x = ints.Contains(i);   // return true or false
6
gsharp

Voici une méthode d'extension, cela permet de coder comme la commande 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);
}

Cela permet des choses comme ça:

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

Ou:

int i = 5;
bool isIn = i.In(1,2,3,4,5);
6
Dennis

Le meilleur du code et complet est ici:

NumbersList.Exists(p => p.Equals(Input)

Utilisation:

List<int> NumbersList = new List<int>();
private void button1_Click(object sender, EventArgs e)
{
    int Input = Convert.ToInt32(textBox1.Text);
    if (!NumbersList.Exists(p => p.Equals(Input)))
    {
       NumbersList.Add(Input);
    }
    else
    {
        MessageBox.Show("The number entered is in the list","Error");
    }
}
2
danialafshari
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;
}
1
sv88erik

Vous devriez faire référence à Selected pas ids.Contains comme dernière ligne.

Je viens de me rendre compte qu'il s'agit d'un problème de formatage du PO. Quoi qu'il en soit, vous devriez référencer la valeur dans Selected. Je recommande d'ajouter des appels à Console.WriteLine pour voir exactement ce qui est imprimé sur chaque ligne et quelle est la valeur de chaque valeur.

Après votre mise à jour: ids est une liste vide, comment ne pas lancer une exception NullReferenceException? Comme il n'a jamais été initialisé dans ce bloc de code

0
Woot4Moo