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