При передаче char в функцию, передается ASCII код

Лучше посмотрите пример, думаю там понятнее :) Суть задачи: Дается выражение в постфиксной форме, в виде строки, сначала добавляются цифры, до знака, в стек(выражение(123++): если встречается знак мат. операции, то он проводит операцию над 2-мя последними числами, после чего эти числа удаляются и в стек добавляем их результат и т.д. Решение примера: 2+3 = 5, из стека удаляем эти числа, добавляем 5(теперь в стеке 1 и 5), опять встречаем знак '+': 1 + 5... все конец). Не знаю зачем сделал, пример, но суть проблемы, в том, что при чтении символа из строки и передаче в функцию(класса), передается ASCII код. Почему так происходит, что не так делаю ?

string str = Console.ReadLine();
char[] st = str.ToCharArray();    
foreach (char ch in str)
                {
                    if (ch != '+' && ch != '*')
                    {
                        int a = (char)ch;
                        list.Push_back((char)a);
                    }
                    else
                    {
                        if (ch == '+')
                            list.Push_back(list.Pop() + list.Pop()); // pop, сначала удаляет(перезаписав), потом возвращает символ
                        if (ch == '*')
                            list.Push_back(list.Pop() * list.Pop());
                    }
                }
foreach (var num in list)
            Console.Write(num + "  "); // должен остаться result

Ответы (1 шт):

Автор решения: VladD

Ошибка в этой строке:

int a = (char)ch;

Вы таки образом просто получаете ASCII-код символа. Причина этого простая: в символе ведь не обязательно хранится число, поэтому применять автоматическую конверсию в число нет никакого смысла.

Вам нужно вместо этого сконвертировать вручную:

int a = int.Parse(ch.ToString());

(подумайте, что должна делать программа при ошибичном вводе).

И ваш list должен быть стеком int'ов, а не char'ов.

→ Ссылка