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