【问题标题】:Stack with type parameter error in C# [closed]C#中类型参数错误的堆栈[关闭]
【发布时间】:2016-02-11 16:28:04
【问题描述】:

我正在使用 .NETFramework,Version=v4.5 并尝试创建以下堆栈:

using System;
using System.Collections;
using System.Collections.Generic;
...
Stack<int> s = new Stack<int>(); 

为什么会出现这个错误?

类“System.Collections.Stack”没有 有类型参数

没有类型参数的堆栈可以正常工作。

【问题讨论】:

  • 你也引用System.Collections吗?
  • 从错误中可以看出它使用的是System.Collections.Stack而不是通用版本,所以@YuvalItzchakov可能是对的。
  • 您确定Stack&lt;int&gt; s = new Stack&lt;int&gt;(); 是异常发生的地方吗?如果是,您可以尝试将其更改为:System.Collections.Generic.Stack&lt;int&gt; s = new System.Collections.Generic.Stack&lt;int&gt;(); 吗?
  • @DavidG - 耸耸肩 4 个其他迷失的灵魂认为这很有帮助,而无需尝试检查。 RTFM!
  • @henninghall - 不要使用所有的导入......使用通用的......或者在声明中使用命名空间指定类型。System.Collections.Generic.Stack s = new System .Collections.Generic.Stack();这样编译器就不会因为歧义而混淆类型。

标签: c# .net generics stack


【解决方案1】:

这对我有用:

using System.Collections.Generic;

namespace HashSetPerformance
{
    public class SampleStack
    {
        public SampleStack()
        {
            Stack<int> s = new Stack<int>();
        }
    }
}

看看:MSDN-Generic-Stack-Class

确保你没有这样做:

using System.Collections; // This has to be: using System.Collections.Generic;

    namespace HashSetPerformance
    {
        public class SampleStack
        {
            public SampleStack()
            {
                Stack<int> s = new Stack<int>();
            }
        }
    }

因为这使用了非泛型类型Stack-Class:MSDN-Stack-Class

【讨论】:

  • 这个答案有什么问题?
  • 没什么,但一开始很糟糕。
【解决方案2】:

您使用了错误的导入:

using System.Collections;

应该是:

using System.Collections.Generic;

【讨论】:

    【解决方案3】:

    您想使用 generic 堆栈类 - 一个允许您创建整数堆栈的堆栈类 - 您需要使用 System.Collections.Generic

    System.Collections 可让您创建对象堆栈。

    使用非泛型堆栈,您可以将数字 42 和字符串“frotz”推入堆栈,如下所示:

    s.Push(42);
    s.Push("frotz");
    

    但你必须知道(或弄清楚)当你从堆栈中弹出一些东西时你得到了什么。因为它将所有内容都作为object 处理,而不是作为intstring

    使用通用堆栈,您不会将整数和字符串压入其中。您可以根据声明的方式将 ints 字符串推送到其上。

    Stack 就像使用 ArrayList 一样老派 - 它只是对象的集合。

    Stack&lt;&gt; 几乎总是(总是?)人们想要使用的东西。

    简而言之(右) - 您收到错误是因为您对 use 说的类型(通过 using)不接受类型。它只是处理对象。

    【讨论】:

      【解决方案4】:

      通过从现有代码创建新项目解决了该问题。

      之后不需要更改任何代码,因此仍然不确定导致错误的原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-25
        • 2020-07-27
        • 1970-01-01
        • 2017-04-20
        • 2019-05-28
        • 1970-01-01
        • 1970-01-01
        • 2013-05-26
        相关资源
        最近更新 更多