Pergunta

Existem aulas IEnumerable que não se repete?

Por não-repetível Quero dizer, onde você não pode chamar com segurança GetEnumerator várias vezes ou onde chamar GetEnumerator tem efeitos colaterais observáveis.

Foi útil?

Solução

File.ReadLines() faz retornar um IEnumerable<T> que só funciona uma vez.

Outras dicas

É possível para implementações de IEnumerable (Of T) para retornar todos os itens que entenderem, para qualquer que seja a razão. é muito bem espera-se que se um chamadas GetEnumerator duas vezes na mesma seqüência de itens, e então começa a percorrer os dois entrevistadores, eles devem quer produzir os mesmos itens na mesma ordem ou lançar uma exceção. Há uma série de rotinas que aceitar um IEnumerable (Of T) e irá falhar mal se for dado um que não cumprir tal contrato a.

Se eu tivesse meus druthers, IEnumerable teria sido dividido em uma família de interfaces; recenseador do IEnumerable básica perderia o método Reset e iria transmitir nenhuma promessa particular de repetibilidade. Um novo IMultiEnumerable voltaria um enumerador com um método Reset e e uma garantia de que múltiplas passagens renderia dados idênticos; o enumerador também pode apoiar o seu próprio método GetEnumerator (acho que deve ser prático para qualquer tipo que pode suportar multi-pass enumeração; o único custo seria um ponteiro 'start' para que o recenseador aninhada seria reposto para a localização do seu original criação).

Não, qualquer classe bem comportando que implementos IEnumerable permitirá enumerações repetidas.

Para enumerar coleções que não são repetíveis, você não tem uma classe que implementa IEnumerable. Em vez disso você tem um método que retorna um enumerador. Dessa forma, o recenseador em vez de uma classe contém a coleção, por isso não é possível chamar GetEnumerator duas vezes para a mesma coleção. Para repetir o recenseador você tem que chamar o método para criar uma nova coleção.

Um exemplo disso é o método Enumerable.Range. Ele cria os itens para uma escala em tempo real, assim que a escala não existe como uma coleção, o que o torna não-repetível. Para enumerar a mesma faixa novamente você chamar o método para criar uma nova gama com os mesmos limites.

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