我正在制作PriorityQueue<T>
课程,现在我正在使用List<T>
作为后备存储。以下是我得到的错误:
具有正确的后缀/没有不正确的后缀
不要公开List<T>
对于-Queue后缀,我需要继承Queue<T>
,但是要对Queue<T>
进行排序,我需要清空队列,排序,然后重新填充队列。另外,如果我继承自Queue<T>
,我会违反LSP,因为优先级队列不是FIFO集合。
对于我正在制作的其中一种PriorityQueues,使用IComparer<T>
来比较元素,但IComparer<T>
仅支持数组和List<T>
。
我确实看到this question,但它与我的问题没有完全相关。
所以这是我的问题:
我应该抑制这些代码分析警告吗?
我应该继承Queue<T>
并重写我的类来解决它,即使效率较低吗?
如果没有,我还应该换掉List<T>
换取其他内容吗?
编辑: 我不知道这是否会有所不同,但以下是我对每个课程的设置:
PriorityQueue<T>
- 抽象基类(Sort()是抽象的)
PriorityQueue<T, TComparer>
- 使用比较器的子类
排序
ReflectionPriorityQueue<T>
- 使用反射的子类
排序,细节对这个问题不重要。答案 0 :(得分:5)
这些错误与使用List<T>
无关 - 它们与公共API有关。
具有正确的后缀/没有不正确的后缀
这个是值得商榷的 - 就个人而言,我会停用此警告,因为PriorityQueue<T>
在我看来应该使用名称PriorityQueue<T>
。
不要公开列表
这只是意味着您无法公开将List<T>
公开为List<T>
。如果您要封装列表,则永远不会出现。只要您保留列表私有,此警告就会消失。
我应该从Queue继承并重写我的类来解决它,即使效率较低吗?如果没有,我还应该换掉List吗?
我怀疑问题是你试图将List<T>
子类化,这是一个坏主意。将其封装为私有成员,并实现相应的接口。