Disons que j'ai le code suivant:
class SampleClass
{
public int Id {get; set;}
public int Name {get; set;}
}
List<SampleClass> myList = new List<SampleClass>();
//list is filled with objects
...
string nameToExtract = "test";
Ma question est donc de savoir quelle fonction de liste puis-je utiliser pour extraire de myList
uniquement les objets dont la propriété Name correspond à ma chaîne nameToExtract
.
Je m'excuse par avance si cette question est vraiment simple/évidente.
Vous pouvez utiliser la méthode d'extension Enumerable.Where :
var matches = myList.Where(p => p.Name == nameToExtract);
Retourne un IEnumerable<SampleClass>
. En supposant que vous souhaitiez filtrer List
, appelez simplement .ToList()
ci-dessus.
À propos, si j'écrivais le code ci-dessus aujourd'hui, je ferais le contrôle d'égalité différemment, compte tenu de la complexité de la gestion des chaînes Unicode:
var matches = myList.Where(p => String.Equals(p.Name, nameToExtract, StringComparison.CurrentCulture));
myList.Where(item=>item.Name == nameToExtract)
using System.Linq;
list.Where(x=> x.Name == nameToExtract);
Edit: question mal interprétée (maintenant tous les matches)
En plus des autres réponses suggérant LINQ, une autre alternative dans ce cas serait d’utiliser la méthode FindAll
:
List<SampleClass> results = myList.FindAll(x => x.Name == nameToExtract);