2009-09-18 8 views
0

Eh bien, j'ai un objet appelé Mamamia et à l'intérieur il a quelques propriétés de chaîne. J'ai créé une liste de cet objet et l'ai rempli de 150 objets. J'essaie d'utiliser List.FindAll mais je ne sais vraiment pas comment le faire. J'ai essayé de cette façon:FindAll dans une liste d'objets personnalisés

produto = products.FindAll(delegate(Mamamia cv) {return cv.LocalPackage.Remove(1,21) == cmbPackage.SelectedValue}; 

Je ne sais pas pourquoi le délégué est là, je viens d'essayer de copier d'un autre code sur Internet.

Merci d'avance!

Répondre

1

Le délégué est là pour voir si la valeur que vous testez est ce que vous cherchez. L'appel à Remove semble inquiétant comme si il est en train de muter la valeur - c'est rarement une bonne chose lorsque vous parcourez la liste. Je suppose que si c'est une chaîne alors ce n'est pas trop mal, même si ce n'est peut-être pas ce que vous recherchez ...

Quels sont les types impliqués, et que recherchez-vous? Oh, et utilisez-vous C# 3 et/ou .NET 3.5? Cela le rendrait plus facile (même C# 3 contre .NET 2.0 signifie que vous pourriez utiliser une expression lambda au lieu d'une méthode anonyme).

Que se passe-t-il lorsque vous exécutez le code pour le moment? Si c'est juste ne rien trouver, il peut juste être parce que vous testez l'égalité de référence (si SelectedValue renvoie object).

Essayez ceci:

produto = products.FindAll(delegate(Mamamia cv) { 
    return cv.LocalPackage.Remove(1,21).Equals(cmbPackage.SelectedValue); 
}); 

EDIT:

On dirait que vous voulez qu'une seule valeur, et si vous utilisez .NET 3.5, il serait plus idiomatiques d'utiliser LINQ dans la première endroit. J'utiliser:

string selectedText = (string) cmbPackage.SelectedValue; 
Mamamia item = products.FirstOrDefault 
        (cv => cv.LocalPackage.Remove(1,21) == selectedText); 
if (item != null) 
{ 
    // Found it; otherwise item will be null 
} 
+0

J'utilise .NET 3.5 et quand je lance le code, je reçois l'erreur: Impossible de convertir implicitement le type « System.Collections.Generic.List 'à' FindMSIProducts.Mamamia Je cherche une propriété dans une liste d'objets Mamamia –

+1

@Felipe: Est-ce que votre variable 'produto' de type' Liste 'ou seulement' Mamamia' elle-même? Si vous voulez simplement renvoyer un seul élément, utilisez plutôt la méthode 'Find' plutôt que' FindAll'. Si vous prévoyez de renvoyer plusieurs éléments, changez le type de 'produto' en' Liste '. – LukeH

+0

produto est un objet Mamamia et produits est une liste cette liste peut avoir des éléments dupliqués et je veux retourner tous –

Questions connexes