次のクラス宣言の何が問題なのか、誰か説明してもらえますか?
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);
}
}
EqualityComparer を使用している行でコンパイラが不平を言っています。エラーは次のとおりです。
エラー CS0176: 静的メンバー `object.Equals(object, object)' はインスタンス参照ではアクセスできません。代わりに型名で修飾してください
インスタンス参照を使用している場所がわかりません。
すみません、私のせいです。不完全な質問を投稿しました。完全を期すために、 Identifier クラスは次のとおりです。
public interface Identifier<ID_TYPE>
{
ID_TYPE Id{get;set;}
}
そこで EqualityComparer を使用したのは、コピー アンド ペーストのミスが原因でした (申し訳ありませんが、今日は一般的なコードが多すぎます)。
もちろん、私の質問は間違っていました。回答に必要なすべての要素を提供していなかったからです (すぐに削除します)。私はする必要IType
がありIConvertible
ました。とにかくみんなに感謝します。