1

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

有正确的后缀/没有错误的后缀

不要暴露List<T>

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

对于我正在制作的其中一种 PriorityQueues 是使用IComparer<T>来比较元素,但IComparer<T>仅在数组和List<T>.

我确实看到了这个问题,但它与我的问题并不完全相关。

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

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

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

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

  • ReflectionPriorityQueue<T>-- 使用反射进行排序的子类,细节对这个问题并不重要。
4

1 回答 1

5

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

有正确的后缀/没有错误的后缀

这个值得商榷 - 就我个人而言,我会禁用此警告,因为PriorityQueue<T>我认为应该使用 name PriorityQueue<T>

不要暴露列表

这只是意味着您不能公开将. 如果您正在封装列表,则它永远不会出现。只要您将列表设为私有,此警告就会消失。List<T>List<T>

我是否应该从 Queue 继承并重写我的类以解决它,即使它效率较低?如果没有,我是否还应该将 List 换成其他东西?

我怀疑问题在于您正在尝试子类化List<T>,这是一个坏主意。将其封装为私有成员,并改为实现适当的接口。

于 2012-06-28T19:11:16.863 回答