C# 从堆栈强制转换对象

C# 从堆栈强制转换对象,c#,type-conversion,C#,Type Conversion,为什么会这样: 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,所以这真的不重要。。。 这是怎么回事?我是缺少了什么,还是必须解决它?因为堆栈是堆栈实现

为什么会这样:

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
,所以这真的不重要。。。
这是怎么回事?我是缺少了什么,还是必须解决它?

因为
堆栈是堆栈实现的非通用变体
Pop
返回一个
对象
,而cast
object->char
无效

但这确实有效:

char c = (char)(int)s.Pop();
我的两分钱:使用
堆栈的通用实现

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

使用
堆栈的通用版本

Stack<int> s = new Stack<int>();
s.Push(97);
char c = (char)s.Pop();
Console.WriteLine(c);
Stack s=新堆栈();
s、 推(97);
char c=(char)s.Pop();
控制台写入线(c);

s.Push((char)97)
?我想知道你为什么使用
System.Collections
命名空间中的内容而不是
System.Collections.Generic
@RubensFarias是的,我可以在这个示例中这样做,但不能在我正在编程的内容中这样做。这被大大简化了。