Czy ktoś może mi wyjaśnić, co się dzieje w poniższej deklaracji klasy:C# rodzajowe klasy i EqualityComparer
private class PriorityQueueEntry<TPriorityValue,IIdentifiableEntry,IType> :
IComparer<PriorityQueueEntry<TPriorityValue,IIdentifiableEntry,IType>>
where TPriorityValue : IComparable
where IIdentifiableEntry : Identifier<IType>
{
public TPriorityValue Priority{get;private set;}
public IIdentifiableEntry Entry{get;private set;}
public PriorityQueueEntry(TPriorityValue val,IIdentifiableEntry entry)
{
Priority = val;
Entry = entry;
}
public int Compare(PriorityQueueEntry<TPriorityValue,IIdentifiableEntry,IType> first, PriorityQueueEntry<TPriorityValue,IIdentifiableEntry,IType> second)
{
if (first.Priority.CompareTo(second.Priority) < 0)
{
return -1;
}
else if (first.Priority.CompareTo(second.Priority) > 0)
{
return 1;
}
return EqualityComparer<IIdentifiableEntry>.Default.Equals(first.Entry.Id, second.Entry.Id);
}
}
Kompilator complaing na linii, gdzie używam EqualityComparer. Błąd jest następujący:
error CS0176: statyczne członek `object.Equals (obiekt, obiekt)” nie można dostępne z odniesieniem instancji zakwalifikować go z nazwą typu zamiast
Nie widzę, gdzie używam odwołania do instancji.
Przykro mi, moja wina. Napisałem niepełne pytanie. Tylko dla kompletności, klasa Idetifier tylko następujące:
public interface Identifier<ID_TYPE>
{
ID_TYPE Id{get;set;}
}
użyciu EqualityComparer nie było powodu kopiowania i wklejania pomyłkę (sorry chłopaki, zbyt wiele kodów generycznych dziś).
Oczywiście moje pytanie było błędne, ponieważ nie podałem ci wszystkich elementów, na które musiałaś odpowiedzieć (wkrótce je usunę). Potrzebowałem IType
, aby być IConvertible
. Dziękuję wszystkim.
Ten kod nie będzie kompilować od równymi zwraca bool i metoda powinna zwracać int –
@WouterdeKort: Ick. Dzięki, edytuje. –
faktycznie IType: IConvertible rozwiązał moje problemy. Przepraszamy za niepełne pytanie. – Heisenbug