C# 编译器错误CS0201

C# 编译器错误CS0201,c#,C#,这个问题可能有点吹毛求疵,但我真的需要理解这一点 我有以下代码: string.Equals("0", "1"); //returns false, does compile 及 第二部分抛出异常 只能将赋值、调用、递增、递减和新对象表达式用作语句 例如,必须至少调用一个赋值(=)、方法调用()、新的、--或+操作 问题:这是否意味着=不是一种方法 正确=不是一种方法。是接线员。而一个比较运算符本身没有观察到比较结果,这是没有意义的 您可以这样做: 因为.Equals()是一个方法调用,正如您

这个问题可能有点吹毛求疵,但我真的需要理解这一点

我有以下代码:

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

第二部分抛出异常

只能将赋值、调用、递增、递减和新对象表达式用作语句

例如,必须至少调用一个赋值(
=
)、方法调用
()
新的
--
+
操作


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

正确<代码>=不是一种方法。是接线员。而一个比较运算符本身没有观察到比较结果,这是没有意义的

您可以这样做:

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


编辑:要澄清您在问题中编辑的内容:

i == 0; //should return false

运算符不会“返回”结果,但它会计算结果。(尽管是支持/重载运算符的自定义方法,但框架正在幕后使用该方法来评估结果。)但是,运算符只能在语言允许的上下文中使用。对于比较运算符,编译器不允许它本身作为语句存在。(无需允许,因此无需语言/编译器等团队支持。)

您不能使用比较
i==0作为单个语句。如果试图将变量声明为if块的唯一语句,也会发生同样的情况,例如
if(true){int i=0}
==实际上不是一个方法,它是一个运算符
=
是一个运算符。它可以由自定义类型的方法支持,但编译器可以在知道涉及的类型时自由编译专用代码。如果它不编译,则不会返回任何内容。@DarrenYoung谢谢,我已经更新了问题
i.Equals(0);
i == 0; //should return false