IComparer basato sulla proprietà di un'interfaccia
Domanda
Ho creato una class Car che deriva dalla classe astratta TransportMeans e implementa un interfaccia PrivateMeans che contiene solo una proprietà:
interface PrivateMean
{
int capacity { set; get; }
}
Voglio implementare una classe che ordina gli oggetti della classe Car in base alla capacità della proprietà.Voglio farlo utilizzando l ' interfaccia IComparer .
Tuttavia, quando dichiaro una classe CarComparer aggiuntiva come segue:
public class CarComparer : IComparer<Car>
{
int IComparer<Car>.Comparer(Car obj1, Car obj2)
{
PrivateMean t1 = (PrivateMean)obj1;
PrivateMean t2 = (PrivateMean)obj2;
if (t1 != null && t2 != null)
{
if (t1.capacity >= t2.capacity)
return 1;
else return -1;
}
else
throw new ArgumentException("Some Parameter is not a Car!");
}
}
Ricevo l'errore:
Errore 1 "MeansOfTransport.CarComparer" non implementa il membro di interfaccia "System.Collections.Generic.IComparer.Compare (MeansOfTransport.Car, MeansOfTransport.Car)".
Qual è il problema?
Inoltre non sono autorizzato a utilizzare IComparer senza una definizione del tipo (Auto).Perché?
Soluzione
Hai
int IComparer<Car>.Comparer(Car obj1, Car obj2)
Probabilmente intendevi
int IComparer<Car>.Compare(Car obj1, Car obj2)
Altri suggerimenti
Possibili problemi:
- Devi implementare un metodo
Compare
, ma il tuo si chiamaComparer
- Il metodo che stai implementando è
public
, quindi anche il tuo dovrebbe esserlo.Attualmente il tuo metodo non ha modificatori di accesso, quindi per impostazione predefinita saràinternal
.