2009-12-23 7 views
4

J'ai une liste générique de valeurs. Je veux vérifier pour voir si un Id existe dans cette liste générique.Vérifier la valeur dans la liste

Quelle est la manière la plus simple de procéder?

exemple

List<someCustomObject> mylist = GetCustomObjectList(); 

int idToCheckFor = 12; 

Je veux voir si 12 existe dans l'un des objets personnalisés dans la liste en vérifiant chaque someCustomObject.Id = idToCheckFor

Si une correspondance est trouvée, je suis bon aller et ma méthode retournera un booléen vrai. J'essaie juste de comprendre s'il y a un moyen facile au lieu de boucler chaque élément de la liste pour voir si idToCheckFor == someCustomObject.id et de mettre une variable à true si une correspondance est trouvée. Je suis sûr qu'il doit y avoir une meilleure façon de faire.

+0

Alors oui je vais avec l'option LINQ. Mais si je devais boucler, je devine quoi, la meilleure façon serait de définir un var bool à false ... et de le mettre à vrai quand il trouve une correspondance et sortir de la boucle quand il trouve la correspondance et retourne le bool var. – PositiveGuy

+0

@coffee: Si vous étiez en boucle, l'option la plus simple serait de 'return true;' depuis la boucle si vous l'avez trouvé, puis 'return false;' après la fin de la boucle. –

+0

Pour l'option de boucle ... foreach (someCustomObject checkObject dans mylist) {if (checkObject.Id == idToCheckFor {return vrai;}} return false; – GrayWizardx

Répondre

6

Si vous utilisez .NET 3.5, cela est facile LINQ aux objets:

return myList.Any(o => o.ID == idToCheckFor); 

En dehors de cela, une boucle à travers est vraiment votre seule option.

+0

Salut Adam .. meilleure requête que ma version :) (+1), Peux-tu me diriger vers de bonnes ressources en objets, ce serait utile, merci! :) –

+0

@Mahesh Velaga: Consultez le livre C# Profondeur. – jason

+0

@Mahesh: La ressource la plus utile serait la page MSDN de la classe statique 'Enumerable', car elle expose les méthodes d'extension LINQ-to-objects. http://msdn.microsoft.com/en-us/library/system.linq.enumerable.aspx –

0

Je pense que vous utilisez la mauvaise structure de données pour cela. Ce dont vous avez besoin est:

Dictionary<int, someCustomObject> myDictionary = GetCustomObjectDictionary(); 

Maintenant, vous pouvez facilement vérifier si l'ID existe avec des performances fantastiques.

return myDictionary.ContainsKey(idToCheckFor); 
+1

Ceci est une évaluation difficile à faire puisque vous ne savez pas quoi d'autre il utilise la structure de données pour. – jason

+0

Le dictionnaire est le chemin à parcourir si vous avez une grande liste d'objets et que vous devez effectuer plusieurs recherches. – ScottS

+0

Il est tout à fait possible qu'un 'Dictionary' soit la structure de données appropriée, mais vous faites l'hypothèse que les identifiants sont uniques. C'est probable, mais pas certain. –

0
bool found = mylist.Any(p => p.Id == idToCheckFor); 
2
Boolean b = myList.Find(obj => obj.id == 12) != null; 
+0

Si vous êtes en 3.5 (ce qui vous obligerait à utiliser un lambda), pourquoi ne pas utiliser la méthode LINQ plutôt que quelque chose de spécifique à 'List '? –

+0

Vous n'avez pas besoin de .net 3.5 pour utiliser un lambda. C'est une fonctionnalité de compilateur. J'utilise les lambas tout le temps en écrivant le code .Net 2.0 avec VS2008. Il produit du code plutôt propre avec des méthodes natives de liste . – cfern

-1

Utilisez LINQ aux objets. Quelque chose comme ce qui suit:

var result = from l in mylist 
      where l.id = 12 
      select l; 

return result != null; 
+1

-1. 'result' est une requête, * pas * un objet. Ce ne serait jamais nul. –

+1

Aussi '=' est un opérateur d'affectation, pas un opérateur pour tester l'égalité. – jason

0
bool bExists = myList.Any(x=>x.id == idToCheckFor); 
0
if(mylist.Any(Item => Item.Id == idToCheckFor)) 
{ 
    do(); 
} 
1

LINQ rend la vie plus facile

mylist.Where(x => x.id == idToCheckFor).Any() 

Merci

+0

Pour info, c'est LINQ, pas Link. –

+0

désolé mon mauvais .. ne sais pas ce que je pensais .. thnks pour souligner :) –

0

myList.Exists retour (item => item.Id == idToCheckFor);

Pour les ressources LINQ vous pouvez vérifier 101 linq samples

Questions connexes