Pergunta

Se eu quiser loop sobre um dicionário (Chave, Valor) ... porque eu não posso adicionar um novo par de valores-chave no circuito?

Dictionary<string, string> persons = new Dictionary<string, string>();

persons.Add("roger", "12");
persons.Add("mary", "13");

foreach (KeyValuePair<string,string> person in persons)
{
 Console.WriteLine("Name: " + person.Key + ", Age: " + person.Value);
 persons.Add("Xico", "22");
}
Foi útil?

Solução

Se você quiser fazer isso, você deve obter uma cópia do dicionário de objetos (pode ser feito de várias maneiras), então enumerá-lo, adicione o que você quer o original.

Simplesmente você não pode adicionar novos itens ao enumerar um Dictionary.

Outras dicas

É por causa da forma como o entrevistador é construído.

De MSDN Dictionary.Enumerator :

Um enumerador permanece válido, desde que a coleção permanece inalterada. Se as mudanças são feitas para a recolha, tal como adicionar, modificar ou apagar elementos, o entrevistador é irrecuperavelmente invalidada e o seu comportamento é indefinido.

É bastante fácil de contornar este problema, no entanto. Basta fazer uma cópia do dicionário (ou de chaves) e iterate através dele, adicionar / remover / etc. do dicionário original como necessário.

Você não pode modificar um dicionário ao enumerar, simples como isso. Caso contrário, quando você sabe que você é feito?

Ao enumerar uma coleção (ou seja, um foreach circular), não é possível adicionar ou remover itens da coleção. Pense em todas as questões que trariam se isso fosse permitido.

Isso é apenas ... estranho. Você está tentando adicionar a mesma pessoa novamente para cada pessoa já está no dicionário.

Além disso: por armazenar a idade como uma string? int (ou mesmo DateTime) parece muito mais apropriado.

Porque ele vai alterar os itens do dicionário que você está rolando ... Não tem nenhum sentido ... (e você pode looping para sempre)

Você está tentando alterar o número de entradas na coleção quando iterando o loop. Um loop for pode fazer isso, mas o foreach iterater não permitirá que você fazê-lo.

Dictionary<string, string> persons = new Dictionary<string, string>();
persons.Add("roger", "12");
persons.Add("mary", "13");
for (int i = 0; i < persons.Count; i++){ 
Console.WriteLine("Name: " + persons[i].Key + ", Age: " + persons[i].Value); 
persons.Add("Xico", "22");
}

Esteja ciente de que este é um loop infinito, porque você está sempre adicionando uma pessoa antes de chegar à última entrada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top