Overriding == per collezioni immutabili

5

Supponiamo che abbia una classe che è una raccolta di sola lettura o oggetti immutabili, ad es.

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

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

Ora, senza alcuni trucchetti da parte del consumatore, né intCollection né i suoi membri possono cambiare, quindi il tipo è immutabile. Seguendo le linee guida MSDN , il tipo dovrebbe sovraccaricare == . Tuttavia, non è chiaro per me che queste linee guida siano destinate ad essere applicate alle raccolte poiché le collezioni incorporate .Net non sovrascrivono nemmeno .Equals . Sono preoccupato quindi che sovraccaricare == come circa .SequenceEquals sarà un comportamento non previsto per altri consumatori.

È una buona idea che le raccolte profondamente immutabili sovraccarichino == ?

    
posta walpen 02.10.2015 - 22:37
fonte

1 risposta

1

Se costruisci due diversi ReadOnlyInts , ma hanno lo stesso contenuto (forse creato dallo stesso oggetto IEnumerable<int> ) vuoi che siano uguali? In questo caso dovresti sovraccaricare == e controllare i contenuti per l'uguaglianza. Altrimenti è solo un confronto di riferimento che fallirà con due oggetti diversi ma identici.

    
risposta data 03.10.2015 - 03:12
fonte

Leggi altre domande sui tag