这个测试是正确的:if(obj1.type == obj2.type == 1)
它实际上做了什么?我想知道这是否意味着某些条件&&
。
答案 0 :(得分:7)
在C和Objective-C中,==
运算符组从左到右进行计算,并产生零或一个结果。因此,您的表达式与
if(obj1.type == obj2.type)
在C#中会产生错误,因为==
运算符不能应用于bool
和int
类型的操作数。
如果您想说“如果obj1.type
和obj2.type
都等于1
”,则需要使用两个单独的==
条件,并将逻辑“AND” “他们之间的经营者:
if(obj1.type == 1 && obj2.type == 1)
答案 1 :(得分:5)
您可以将其更改为:
,而不是使用上述测试条件 if((obj1.type == obj2.type) && (obj2.type== 1))
或者您可以尝试将其更改为::
if((obj1.type == 1) && (obj2.type== 1))
两者之间的区别:
&& operator
&安培;&安培;仅对布尔操作数进行操作。它评估其第一个操作数。如果结果为false,则返回false。否则,它会计算并返回第二个操作数的结果。注意,如果评估第二个操作数假设没有副作用,则结果与&和/或运营商。这是短路评估的一个例子。
== Operator
对于值类型的参数,如果操作数具有相同的值,则运算符==返回true,否则返回false。对于字符串类型,如果字符串的字符序列匹配,则返回true。但是,对于其他引用类型(从System.Object派生的类型),仅当a和b引用同一对象时,a == b才返回true。
答案 2 :(得分:1)
如果obj1和obj2是自定义类的两个对象,其中有一个名为“type”的成员,那么在这种情况下,上面的语句会给你以下错误:
运算符==
不能应用于'bool'和'int'类型的操作数
它给出了这个错误,因为当它评估(obj1.type==obj2.type)
时,它返回bool值(true / false),使用==
运算符无法与整数值进行比较。
如果要比较两个对象的类型,那么在这种情况下,您的代码不正确。 C#对象类没有任何类型的属性或成员。它有一个名为GetType()的方法,您可以按如下方式使用它来比较两个对象的类型。
if(obj1.GetType() == obj2.GetType())
答案 3 :(得分:0)
这听起来像是一个测试问题。
对于一个它不会在c#中编译,因为obj1.type == obj2.type首先计算,然后语句尝试将该布尔结果与int进行比较。
我不能说客观c。
在c中它将编译并且可能总是失败,因为第一次比较完成并且返回false(0)或true(除了0之外的任何东西)。 ==为true返回1的几率可能是%0,但可能是%100,具体取决于编译器,因为该详细信息留给了供应商。第一个比较可能返回0xFFFFFFFF或-12表示true。此外,测试试图做的是我假设在功能上等同于
if (obj1.value == obj2.value)
然后奇怪地再次引入了对“真实”的第二次冗余和错误检查,即“if”语句可以单独执行。