我有一段代码给出了相同的输出,但是想知道为什么C#编译器不会对示例2中提到的赋值抛出错误。
示例1:
int income = 0;
for (int i = 0; i < 5; i++)
{
income = income + i;
}
示例2:
int income = 0;
for (int i = 0; i < 5; i++)
{
income = income = income + i;
}
答案 0 :(得分:2)
从docs.microsoft.com:
赋值运算符(=)存储其右侧操作数的值 在其左手表示的存储位置,属性或索引器中 操作数并返回该值作为结果。操作数必须是 相同类型(或右侧操作数必须隐式地 可转换为左侧操作数的类型。
简单赋值运算符“ =”用于将其右操作数的值存储到由左操作数表示的存储位置中。结果就是它的返回值。
因此,您的操作将执行:income= (income + i)
然后(income)=(income)
,完全有效。
如果您在理解income= (income + i)
时遇到问题,那么,运算符“ +”具有返回类型,因此请像这样看它:int j =(int j + int i)其中(int j + int i)有返回类型int
这也适用于原始类型,如果您尝试使用用户定义的类来执行此操作,则必须重载运算符“ +”
请参阅 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/ 有关C#中运算符的信息