Kann mir jemand erklären, was in der folgenden Klassendeklaration falsch:C# generische Klasse und 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);
}
}
Der Compiler auf der Linie complaing wo ich EqualityComparer verwenden. Der Fehler ist die folgende:
Fehler CS0176: Statischer Member `object.Equals (Object, Objekt)‘ kann nicht mit einer Instanz Referenz zugegriffen werden, qualifizieren sie mit einem Typnamen statt
Ich kann nicht sehen, wo ich eine Instanzreferenz verwende.
Entschuldigung, meine Schuld. Ich habe eine unvollständige Frage gestellt. Nur der Vollständigkeit halber ist Idetifier Klasse nur die folgenden:
public interface Identifier<ID_TYPE>
{
ID_TYPE Id{get;set;}
}
EqualityComparer dort verwenden, um eine Kopie und Paste Fehler zurückzuführen war (sorry Jungs, zu viel generische Code heute).
Natürlich wurde meine Frage falsch gestellt, weil ich Ihnen nicht alle Elemente gegeben habe, die Sie beantworten mussten (ich werde es bald entfernen). Ich brauchte IType
zu IConvertible
sein. Danke an alle auf jeden Fall.
Dieser Code da Equals nicht kompiliert gibt einen bool und die Methode sollte ein int –
@WouterdeKort zurück: Ick. Danke, wird bearbeitet. –
eigentlich IType: IConvertible löste meine Probleme. Entschuldigung für die unvollständige Frage. – Heisenbug