Overriding == para coleções imutáveis

5

Suponha que eu tenha uma classe que seja uma coleção somente leitura ou objetos imutáveis, por exemplo

public class ReadOnlyInts : IReadOnlyCollection<int>
{
    private readonly IReadOnlyCollection<int> intCollection;
    public ReadOnlyInts(IEnumerable<int> ints)
    {
        intCollection = ints.ToList().AsReadOnly();
    }

    #region IReadOnlyCollection<int> Methods
    // ...
    #endregion
}

Agora, sem algum truque por parte do consumidor, nem o intCollection nem seus membros podem mudar para que o tipo seja imutável. Indo pelas diretrizes do MSDN , o tipo deve sobrecarregar == . No entanto, não está claro para mim que essas diretrizes devem ser aplicadas às coleções, pois as coleções incorporadas do .Net não substituem nem .Equals . Estou preocupado, então, que sobrecarregar == como aproximadamente .SequenceEquals será um comportamento inesperado para outros consumidores.

É uma boa ideia que as coleções profundamente imutáveis sobrecarreguem == ?

    
por walpen 02.10.2015 / 22:37
fonte

1 resposta

1

Se você construir dois diferentes ReadOnlyInts , mas eles tiverem o mesmo conteúdo (talvez criado a partir do mesmo objeto IEnumerable<int> ), você quer que eles sejam iguais? Nesse caso, você deve sobrecarregar == e verificar o conteúdo quanto à igualdade. Caso contrário, é apenas uma comparação de referência que falhará com dois objetos diferentes, mas idênticos.

    
por 03.10.2015 / 03:12
fonte