1

クラスを作っていてPriorityQueue<T>、今はList<T>バッキングストアとして使っています。私が得ているエラーは次のとおりです。

正しいサフィックスを持っている/間違ったサフィックスを持っていない

露出しないList<T>

-Queue サフィックスの場合は継承する必要がありますQueue<T>が、を並べQueue<T>替えるには、キューを空にし、並べ替えてからキューを補充する必要があります。また、 から継承するQueue<T>と、プライオリティ キューは FIFO コレクションではないため、LSP に違反します。

私が作成している PriorityQueues のタイプの 1 つはIComparer<T>、要素を比較するために を使用していますがIComparer<T>、配列 および でのみサポートされていますList<T>

この質問を見ましたが、私の質問とは完全には関係ありません。

ここに私の質問があります: これらのコード分析警告を抑制する必要がありますか? Queue<T>効率が悪いとしても、クラスを継承して書き直して、それで動作するようにする必要がありますか? そうでない場合は、別のものに交換する必要List<T>がありますか?

編集:これが違いを生むかどうかはわかりませんが、各クラスの設定は次のとおりです。

  • PriorityQueue<T>-- 抽象基本クラス (Sort() は抽象)

  • PriorityQueue<T, TComparer>-- 並べ替えに比較子を使用するサブクラス

  • ReflectionPriorityQueue<T>-- リフレクションを使用してソートするサブクラス。詳細はこの質問にとって重要ではありません。
4

1 に答える 1

5

List<T>これらのエラーは、パブリック API の使用とは関係ありません。

正しいサフィックスを持っている/間違ったサフィックスを持っていない

これは議論の余地があります-個人的には、この警告を無効にします。PriorityQueue<T>私の意見では、名前を使用する必要がありますPriorityQueue<T>

リストを公開しない

これは、を として公開できないことを意味します。リストをカプセル化している場合、これは表示されません。リストを非公開にしておく限り、この警告は消えます。List<T>List<T>

Queue から継承し、クラスを書き直してそれを利用する必要がありますか? そうでない場合でも、リストを別のものに交換する必要がありますか?

問題は、 をサブクラス化しようとしていることにあると思いますがList<T>、これは悪い考えです。それをプライベート メンバーとしてカプセル化し、代わりに適切なインターフェイスを実装します。

于 2012-06-28T19:11:16.863 に答える