Usuário com melhor resposta
Como remover itens de uma lista ?

Pergunta
-
Como posso remover itens de uma lista sem que aconteça um break ?
Possuo uma lista que é carregada com dados vindo do banco de dados.
Em seguida realizo alguns calculos e quero me livrar dos valores que estão nesta lista que não satisfaçam uma condição.
olhei esse topico http://stackoverflow.com/questions/832165/net-remove-from-a-listt-within-a-foreach-loop
porém ainda sou bem iniciante em progamação ....
for (int i = 0; i < listaOcorrencia.Count ; i++)
{
if ( condição ????????????????)
{
listaOcorrencia.RemoveAt(i);
i--;}
Não sei como fazer uma condição para um certo item da lista, que quero remover ....
No caso carreguei a lista com dados do banco assim.
ocorrencia.Sumario = rowReader.GetNullableString("RESUMO");
E gostaria de utilizar o FOR para remover os itens que a condição
ocorrencia.Sumario == "Inicio de fase"
Obrigado pela ajuda;
Respostas
-
Se pode fazer seguindo sua lógica
List<int> removeLista = new List<int>(); for (int i = 0; i < listaOcorrencia.Count ; i++) { if ( condição ????????????????) { removeLista.Add(i); } }
Crie uma variavel que vai conter o que se vai excluir, primeiro se procura depois você exclui
Ai faça o novo for logo abaixo
for (int i = 0; i < removeLista.Count ; i++) { listaOcorrencia.RemoveAt(removeLista[i]); }
Obs: Dentro do for "Nunca coloque incrementador ou decrementador, porque o for faz isso para você!
Fúlvio Cezar Canducci Dias- Sugerido como Resposta Fulvio Cezar Canducci Dias segunda-feira, 23 de setembro de 2013 23:58
- Marcado como Resposta Giovani Cr quinta-feira, 26 de setembro de 2013 19:50
Todas as Respostas
-
-
public class ItemQualquer
List<ItemQualquer> lista = new List<ItemQualquer>();
{
public int Id { get; set; }
public string Nome { get; set; }
}
lista.Add(new ItemQualquer() {Id = 1, Nome = "Valor1" });
lista.Add(new ItemQualquer() { Id = 2, Nome = "Valor2" });
lista.Add(new ItemQualquer() { Id = 3, Nome = "Valor1" });
lista.Add(new ItemQualquer() { Id = 4, Nome = "Valor1" });
int quantidadeRemovido = lista.RemoveAll(item => item.Id != 1 && item.Nome == "Valor1");
- Sugerido como Resposta Gabrielr12t sexta-feira, 21 de dezembro de 2018 04:08
-
Cristian.
Obrigado pelo resposta.
O que ocorre ,quando utilizo esse for
for (int i = listaOcorrencia.Count ; i >= 0 ; i--) {
if ( ocorrencia.Sumario == "Inicio de fase")
{
listaOcorrencia.RemoveAt(i);}}
Ele não encontra a referencia "ocorrencia", porque eu não instância. Se eu instânciar ele zera as variaveis carregadas com o metodo abaixo:
private static List<Ocorrencia> ConstruirListaOcorrencias(DataTable dataTable) { List<Ocorrencia> lista = new List<Ocorrencia>(); foreach (DataRow row in dataTable.Rows) { NullableDataRowReader rowReader = new NullableDataRowReader(row); Ocorrencia ocorrencia = new Ocorrencia(); ocorrencia.Referencia = rowReader.GetNullableString("REFERENCIA"); ocorrencia.Id = rowReader.GetNullableString("REQ_ID"); ocorrencia.Sumario = rowReader.GetNullableString("RESUMO"); ocorrencia.Descricao = rowReader.GetNullableString("DESCRICAO"); ocorrencia.Data_Abertura = rowReader.GetNullableDateTime("DT_ABERTURA"); ocorrencia.Data_Fechamento = rowReader.GetNullableDateTime("DT_FECHAMENTO"); ocorrencia.Data_Resolucao = rowReader.GetNullableDateTime("DT_RESOLVIDO"); ocorrencia.Status_Ocorrencia = Status.ConvertCodeToStatus(TipoTicket.Ocorrencia, rowReader.GetString("STATUS_CODE"), rowReader.GetString("STATUS_NAME")); ocorrencia.Nome_Categoria = rowReader.GetNullableString("CATEGORIA"); ocorrencia.StatusNome = rowReader.GetNullableString("STATUS_NAME"); //Ocorrencia.TipoOcorrencia. if (rowReader.Row.Table.Columns.Contains("TIPO")) ocorrencia.Tipo_RRDM = rowReader.GetNullableString("TIPO"); lista.Add(ocorrencia); } return lista;
Com o metodo:
#region Contabiliza os atendimentos por analista - Relatorio Detalhado public static void MontaAtendimentoDetalhado(List<Ocorrencia> listaOcorrencia, DateTime dtInicio, DateTime dtFim, List<string> listaMatriculas, List<Analista> listaAnalista) { DateTime? dtInicial; TipoStatusOcorrencia tipoStatus; string Atendeu; string MatriculaAtendeu; TimeSpan spent; foreach (Analista analista in listaAnalista) { foreach (Ocorrencia ocorrencia in listaOcorrencia) { ... verificações .......
colei um pequeno trecho.
Queria após fazer essas verificações que carregam outras lista, eliminar o que não for na condição , if ( ocorrencia.Sumario == "Inicio de fase")... Porém da o erro de remoção em tempo de execução do foreach...
Estou bem perdido, sei pouco de programação e jogaram esse problema nas minhas costas ....
Valeu.
-
Fiz um exemplo aí, não sei se entendi o que vc tá querendo, mas veja se funciona.
List<string> list = new List<string>(); list.Add("ITEM 1"); list.Add("ITEM 2"); list.Add("ITEM 3"); list.Add("ITEM 4"); list.Add("ITEM 5"); for (int i = 0; i < list.Count; i++) { if (list[i] == "ITEM 1") { list.RemoveAt(i); }
-
Se pode fazer seguindo sua lógica
List<int> removeLista = new List<int>(); for (int i = 0; i < listaOcorrencia.Count ; i++) { if ( condição ????????????????) { removeLista.Add(i); } }
Crie uma variavel que vai conter o que se vai excluir, primeiro se procura depois você exclui
Ai faça o novo for logo abaixo
for (int i = 0; i < removeLista.Count ; i++) { listaOcorrencia.RemoveAt(removeLista[i]); }
Obs: Dentro do for "Nunca coloque incrementador ou decrementador, porque o for faz isso para você!
Fúlvio Cezar Canducci Dias- Sugerido como Resposta Fulvio Cezar Canducci Dias segunda-feira, 23 de setembro de 2013 23:58
- Marcado como Resposta Giovani Cr quinta-feira, 26 de setembro de 2013 19:50
-