C#:运算符'!='不能应用于类型为'object'和'char'的操作数

时间:2018-07-06 16:14:55

标签: c#

我是一名新手,正在尝试解决Leetcode上的问题,但是出现了编译错误。

public class Solution 
{
public bool IsValid(string s) 
{
    if(s.Length%2==1)
    {
        return false;
    }
    if(s.Length==0)
    {
        return true;
    }
    Stack st=new Stack();
    for(int i=0;i<s.Length;i++)
    {
        switch(s[i])
        {
            case '(':
            st.Push(s[i]);
            break;
            case'[':
            st.Push(s[i]);
            break;
            case'{':
            st.Push(s[i]);
            break;
            case ')':
            if(st.Count==0||st.Peek()!='(')
            {
                return false;
            }
            else
            {
                st.Pop();
            }
            break;
            case']':
            if(st.Count==0||st.Peek()!='[')
            {
                return false;
            }
            else
            {
                st.Pop();
            }
            break;
            case'}':
            if(st.Count==0||st.Peek()!='}')
            {
                return false;
            }
            else
            {
                st.Pop();
            }
            break;
        }
    }
    return st.Count==0;
}
}

我得到一个错误。

  

第28行:运算符'!='不能应用于类型为'object'和'char'的操作数

可能是这个人

if(st.Count==0||st.Peek()!='(')    

我知道这与数据类型有关,但是我不知道如何解决它。

我不是讲英语的人,所以我的一些英语语法可能有些疯狂。抱歉,谢谢您的帮助。

2 个答案:

答案 0 :(得分:12)

Stack存储对象,但是您要专门存储char。 请改用Stack<char>

  Stack<char> st = new Stack<char>();

答案 1 :(得分:2)

由于使用的是不带泛型的堆栈,因此出现错误。您的堆栈是Object类型的堆栈。

您需要将从堆栈中弹出或查看的数据投射到char

示例:

if(st.Count==0|| (char) st.Peek()!='(')