编译器错误CS0201

时间:2017-02-09 14:49:42

标签: c#

这个问题可能有点挑剔,但我真的需要理解这一点。

我有以下代码:

string.Equals("0", "1"); //returns false, does compile

int i = 1;
i == 0; //should return false, does not compile

第二部分抛出异常

  

只有赋值,调用,递增,递减和新对象表达式才能用作语句

作为documented,至少有一个分配(=),方法调用()new--++操作必须是调用。

问题:这是否意味着==不是一种方法?

1 个答案:

答案 0 :(得分:1)

正确。 ==不是一种方法。它是一个运营商。并且比较运算符本身没有观察比较结果,没有任何意义。

可以这样做:

i.Equals(0);

因为.Equals()是方法调用,并且正如您在string.Equals()中演示的那样,您可以单独调用一行上的方法(即使您忽略了方法的结果)。

修改:澄清您已编辑到问题中的内容:

i == 0; //should return false

运营商没有"返回"结果,但评估结果。 (尽管有一个自定义方法支持/重载操作符,但框架正在使用该方法来评估结果。)但是,运算符只能在语言允许的上下文中使用。在比较运算符的情况下,编译器不允许它作为语句本身存在。 (没有必要允许它,因此语言/编译器/团队不需要支持它。)