Ho un metodo virtuale che restituisce una raccolta di elementi che devono essere unici. Voglio assicurarmi che sia ovvio quando si sostituisce il metodo. Qual è il modo migliore per farlo?
Ecco un esempio, dove "Two"
viene restituito due volte erroneamente.
public abstract class Base
{
public abstract IEnumerable<string> GetUniqueNames();
}
public class Derived : Base
{
public override IEnumerable<string> GetUniqueNames()
{
return new List<string> { "One", "Two" };
}
}
public class Subderived : Derived
{
public override IEnumerable<string> GetUniqueNames()
{
return base.GetUniqueNames().Concat(new List<string> { "Two", "Three" });
}
}
Sto pensando di restituire qualcosa come UniqueValueCollection che genererebbe un'eccezione quando si tenta di aggiungere un duplicato. In questo modo altri sviluppatori avranno un suggerimento dal nome e un errore descrittivo se tentano ancora di utilizzarlo in modo improprio. È una buona idea?
PS: Non ho bisogno di accedere agli elementi per chiave - è solo una collezione enumerabile, sebbene UniqueValueCollection < > potrebbe utilizzare Dizionario < > / HashSet < > dietro le quinte.
PPS: forse un HasSet < > dietro un'interfaccia? Sarebbe bello se fosse ordinato però.