Rechercher un élément dans une Liste<> qui contient une valeur
J'ai un List<MyClass> MyList
où
public class MyClass
{
public string name { get; set; }
public string value { get; set; }
}
Donné un nom, je voudrais obtenir la valeur correspondante. J'ai actuellement mis en œuvre comme:
MyList[MyList.FindIndex(item => String.Compare(item.name, "foo", 0) == 0)].value
Est-il une manière plus propre de faire cela?
- Double Possible de Comment puis-je trouver un élément spécifique dans une Liste<T>?.
InformationsquelleAutor RaGe | 2013-04-23
Vous devez vous connecter pour publier un commentaire.
Utiliser LINQ:
(Ce sera juste trouver le premier match, bien sûr. Il ya beaucoup d'options autour de cela.)
Ou de l'utilisation
Trouver
au lieu deFindIndex
:J'avais suggèrent fortement l'utilisation de LINQ que - c'est beaucoup plus idiomatiques approche de ces jours.
(Je voudrais aussi suggérer l' .NET des conventions de nommage.)
.value
MyList
n'est pas une propriété ou une constante, il devrait probablement êtremyList
, oui. Non pas que je suis toujours désireux demy
comme préfixe pour les noms.Vous pouvez utiliser le
Where
de filtre etSelect
pour obtenir la valeur souhaitée.Je voudrais utiliser
.Equals()
à des fins de comparaison, au lieu de==
.Comme suit:
En particulier parce qu'il vous donne des options comme StringComparison, qui est génial. Exemple:
Cela permet à votre code d'ignorer les caractères spéciaux, majuscules et minuscules. Il y a plus d'options.
À l'aide de la fonction Rechercher est le moyen le plus propre.
Énumérable.Premier
retourne l'élément à la place d'un index. Dans les deux cas, vous obtiendrez une exception si aucun élément correspondant apparaît dans la liste (l'original de votre code de jeter unIndexOutOfBoundsException
lorsque vous essayez d'obtenir l'élément à l'indice -1, maisFirst
va jeter unInvalidOperationException
).