修复代码分析错误或违反Liskov替换原则/使代码效率低得多

JKo*_*Kor 1 c# code-analysis visual-studio-2010

我正在PriorityQueue<T>上课,现在我正在List<T>用作后备商店.以下是我得到的错误:

有正确的后缀/没有不正确的后缀

不要暴露 List<T>

对于-Queue后缀我需要继承Queue<T>,但是为了排序Queue<T>,我需要清空队列,排序,然后重新填充队列.此外,如果我继承Queue<T>,我会违反LSP,因为优先级队列不是FIFO集合.

对于其中一种PriorityQueues,我正在使用a IComparer<T>来比较元素,但IComparer<T>只支持在数组和List<T>.

我确实看到了这个问题,但它与我的问题没有完全相关.

所以这是我的问题:我应该抑制这些代码分析警告吗?我应该继承Queue<T>并重写我的类来解决它,即使效率较低吗?如果没有,我还应该换掉List<T>其他东西吗?

编辑:我不知道这是否会有所不同,但以下是我的每个类的设置:

  • PriorityQueue<T> - 抽象基类(Sort()是抽象的)

  • PriorityQueue<T, TComparer> - 使用比较器进行排序的子类

  • ReflectionPriorityQueue<T> - 使用反射进行排序的子类,对此问题不重要的细节.

Ree*_*sey 5

这些错误与使用a无关List<T>- 它们与公共API有关.

有正确的后缀/没有不正确的后缀

这个是值得商榷的 - 就个人而言,我会禁用此警告PriorityQueue<T>,在我看来,应该使用该名称PriorityQueue<T>.

不要公开List

这只是意味着你不能公开地公开List<T>作为一个List<T>.如果您要封装列表,则永远不会出现.只要您将列表保密,此警告就会消失.

我应该继承Queue并重写我的类来解决它,即使效率较低吗?如果没有,我还应该换掉List吗?

我怀疑问题是你正在尝试子类化List<T>,这是一个坏主意.将其封装为私有成员,并实现相应的接口.