从堆栈中投射对象

时间:2019-01-31 13:04:01

标签: 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,所以这真的没关系... 这里发生了什么?我是否缺少某些东西,还是需要解决?

2 个答案:

答案 0 :(得分:1)

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

这确实可以:

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

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

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

答案 1 :(得分:0)

使用Stack<T>的通用版本,例如

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