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!

Foi útil?

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
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top