这个问题可能有点挑剔,但我真的需要理解这一点。
我有以下代码:
string.Equals("0", "1"); //returns false, does compile
和
int i = 1;
i == 0; //should return false, does not compile
第二部分抛出异常
只有赋值,调用,递增,递减和新对象表达式才能用作语句
作为documented,至少有一个分配(=
),方法调用()
,new
,--
或++
操作必须是调用。
问题:这是否意味着==
不是一种方法?
答案 0 :(得分:1)
正确。 ==
不是一种方法。它是一个运营商。并且比较运算符本身没有观察比较结果,没有任何意义。
你可以这样做:
i.Equals(0);
因为.Equals()
是方法调用,并且正如您在string.Equals()
中演示的那样,您可以单独调用一行上的方法(即使您忽略了方法的结果)。
修改:澄清您已编辑到问题中的内容:
i == 0; //should return false
运营商没有"返回"结果,但评估结果。 (尽管有一个自定义方法支持/重载操作符,但框架正在使用该方法来评估结果。)但是,运算符只能在语言允许的上下文中使用。在比较运算符的情况下,编译器不允许它作为语句本身存在。 (没有必要允许它,因此语言/编译器/团队不需要支持它。)