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?
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
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é.
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
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);
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");
}
}
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;
}
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