【问题标题】:Casting an object from a stack [duplicate]从堆栈中投射一个对象[重复]
【发布时间】:2019-06-24 22:55:31
【问题描述】:

为什么会这样:

System.Collections.Stack s = new Stack();
s.Push(97);
char c = (char) s.Pop(); //throws InvalidCastException

抛出一个错误,但是这个:

char c = (char) 97; //c = 'a'

工作正常吗?

我特别困惑,因为s.Pop().GetType() 返回System.Int32,所以这真的不重要...... 这里发生了什么?我错过了什么,还是我必须解决它?

【问题讨论】:

  • s.Push((char)97);?
  • 我想知道为什么你甚至使用来自 System.Collections 命名空间的东西而不是 System.Collections.Generic
  • @RubensFarias 是的,我可以在这个例子中做到这一点,但不是在我正在编程的东西的上下文中。这大大简化了。

标签: c# type-conversion


【解决方案1】:

因为Stack 是堆栈实现的非通用变体。 Pop 返回一个object,并且转换object -> char 无效。

这确实有效:

char c = (char)(int)s.Pop();

我的两分钱:使用Stack的通用实现:

`Stack<char> s = new Stack<char>();`

【讨论】:

    【解决方案2】:

    使用通用版本的Stack&lt;T&gt;like

    Stack<int> s = new Stack<int>();
    s.Push(97);
    char c = (char)s.Pop();
    Console.WriteLine(c);
    

    【讨论】:

      猜你喜欢
      • 2013-03-05
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 2022-10-17
      相关资源
      最近更新 更多