C# - 扩展堆栈类 - 错误

时间:2010-10-19 04:58:54

标签: c#

我收到一个错误:“非泛型类型`System.Collections.Stack'不能与类型参数一起使用”

    // For use in BONUS section of lab:
    class LossyStack<T> : Stack<T> {
 private const int getAway=1;  // Starts out at 1 (out of 20 random numbers - 5%)
    public Stack<string> escsaped;

    public LossyStack(): base() {   // Constructor
        escaped = new Stack<string>();
    }

    public T Pop() {
  RandomNumber rand = new RandomNumber(1,20);  // One to twenty 

  if (rand<=getAway){
      escaped.push(base.Pop());
  }
  else {
        return base.Pop();
  }
  getAway++; // add another 1 to getAway so it increases by 5%
    }
  }

谁能告诉我怎么能解决这个问题?谢谢一堆。

3 个答案:

答案 0 :(得分:6)

替换:

使用System.Collections;

使用System.Collections.Generic;

答案 1 :(得分:3)

我看到的一个问题是“转义”堆栈是字符串类型,并且您正在从“通用”堆栈的基类推送它。

另一个问题是“getaway”被声明为const,在这种情况下你将无法在你的pop方法中增加它。

此处附加编辑: 您的Pop方法不会为每个代码路径返回任何内容,因此无法编译。当你进入转义堆栈时,你是否打算循环?

我打算尝试清理它并使一些东西可行,但我不确定这应该是做什么的。这里有一些代码,由于代码路径返回问题,它仍然无法编译,但它清理了一下:

class LossyStack<T> : Stack<T>
{
    private int getAway = 1;  // Starts out at 1 (out of 20 random numbers - 5%)
    public Stack<T> escaped = new Stack<T>();

    public LossyStack()
        : base()
    {   // Constructor
    }

    public T Pop()
    {
        Random rand = new Random();
        if (rand.Next(20) <= getAway)
        {
            escaped.Push(base.Pop());
        }
        else
        {
            return base.Pop();
        }
        getAway++; // add another 1 to getAway so it increases by 5%
    }
}

答案 2 :(得分:0)

嗯,也许你需要一个:

using System.Collections.Generic;

在您的.cs文件中。