C# C:运算符“!=”无法应用于“object”和“char”类型的操作数
我是一名新学员,正在尝试解决Leetcode上的一个问题,但出现了一个编译错误C# C:运算符“!=”无法应用于“object”和“char”类型的操作数,c#,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
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;
}
}
我知道这是关于数据类型的,但我不知道如何解决它
我不会说英语,所以我的一些英语语法可能是疯狂的。对此很抱歉,如果您能帮助我,谢谢您。您遇到了错误,因为您使用的堆栈没有泛型。您的堆栈是Object类型的堆栈 您需要将从堆栈中弹出或查看的数据转换为char 例如:
if(st.Count==0|| (char) st.Peek()!='(')
堆栈存储对象,但您希望专门存储字符。
改用
ifst.Count==0 | | st.Peek.ToString=你必须投射这个物体。比如:查尔·圣皮克=这两个答案都是正确的,问题是编译器无法隐式地知道对象是否为char,因此必须将其强制转换为char,使堆栈成为chars的堆栈。这两个答案都是正确的。但遗憾的是,我不能全部接受。我投票赞成这个答案,因为定义堆栈的类型将使任何其他与字符相关的操作变得更容易
if(st.Count==0|| (char) st.Peek()!='(')
Stack<char> st = new Stack<char>();