FindAll em uma lista de objetos personalizados
Pergunta
Bem, eu tenho um objeto chamado Mamamia e dentro dele tem algumas propriedades de cadeia. Eu criei uma lista deste objeto e preenchida com 150 itens.
Eu estou tentando usar List.FindAll mas eu reaaally não sei como fazê-lo. Eu tentei desta forma:
produto = products.FindAll(delegate(Mamamia cv) {return cv.LocalPackage.Remove(1,21) == cmbPackage.SelectedValue};
Eu não sei por que o delegado está lá, eu apenas tentei copiar de algum outro código na internet.
Agradecemos antecipadamente!
Solução
O delegado está lá para ver se o valor que você está testando é o que você está procurando. A chamada para olhares Remove
preocupante como ele é mutação do valor embora - que é raramente uma coisa boa quando você está procurando através da lista. Eu acho que se é uma string não, então ele é muito ruim, embora possa não ser o que você está depois ...
Quais são os tipos envolvidos, e que você está procurando? Ah, e você está usando C # 3 e / ou .NET 3.5? Isso tornaria mais fácil (mesmo C # 3 contra .NET 2.0 significa que você pode usar uma expressão lambda em vez de um método anônimo).
O que está acontecendo quando você executa o código no momento? Se é só não encontrando nada, ele pode ser apenas porque você está testando para igualdade de referência (se SelectedValue
retornos object
).
Tente isto:
produto = products.FindAll(delegate(Mamamia cv) {
return cv.LocalPackage.Remove(1,21).Equals(cmbPackage.SelectedValue);
});
EDIT:
Parece que você só deseja um único valor, e se você estiver usando o .NET 3.5 seria mais idiomática usar LINQ em primeiro lugar. Eu usaria:
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
}