C# c:“如果”工作起来很奇怪
我在发展自己的基本语言。当我发出“如果”命令时,我得到了:C# c:“如果”工作起来很奇怪,c#,if-statement,C#,If Statement,我在发展自己的基本语言。当我发出“如果”命令时,我得到了: object firstElement = tokens[1]; object secondElement = tokens[3]; string conditionType = tokens[2]; bool resultOfCondition = false; if (conditionType == "==") { if (firstElement == secondElement) { re
object firstElement = tokens[1];
object secondElement = tokens[3];
string conditionType = tokens[2];
bool resultOfCondition = false;
if (conditionType == "==")
{
if (firstElement == secondElement)
{
resultOfCondition = true;
Console.WriteLine("DEBUG: true!");
}
else
{
resultOfCondition = false;
Console.WriteLine("DEBUG: false!");
}
}
else if (conditionType == "!=")
{
}
else
{
throw new System.ArgumentException("It's not any type of contidion!", "original");
}
在哪里
我的控制台的输出非常奇怪:
DEBUG: false!
我不知道发生了什么,为什么输出是假的!
有人能帮我吗?这是因为您正在装箱整数值,而每个框都是一个单独的实例,因此比较将失败 改变
object firstElement = 3;
object secondElement = 3;
到
或者将比较器更改为firstElement。EqualssecondElement查看此处
object firstElement = tokens[1];
object secondElement = tokens[3];
虽然您知道firstElement和secondElement实际上都是值为3的Int32s,但运行时环境将它们视为对象。这是因为您将值放入对象数组中,然后将其分配给对象变量
您的结构值现在已装箱,每个值位于不同的对象中。当您使用==比较不同的对象时,它默认为引用等价。由于您的值被装箱在两个不同的对象中,因此结果为false
有关装箱工作原理的更多信息,请阅读以下内容:单步执行程序时会发生什么?firstElement和secondElement的值是多少?它正显示您告诉它的内容。您应该使用firstElement。等于secondElement。问题是==执行对象的引用相等。这两个对象可能都包含相同的装箱值3,但它们不是相同的对象,它们是具有相同内容的两个不同对象。@dasblinkenlight标记[0]为IF。我用它来检查它是什么命令。@Kyle它工作了!谢谢你的帮助@Meirionhoughes嗯,问题有点简单。我对调试给出了一种讽刺性的评论,但老实说,OP很可能会这样做,并且对他看到的结果感到困惑,因为调试过程不会尖叫这是装箱的。删除并改为回答。但这绝对是边缘化的,而且在我看来,对那些没有表现出努力的问题投反对票也是合理的。
int firstElement = 3;
int secondElement = 3;
object firstElement = tokens[1];
object secondElement = tokens[3];