这里要注意的是,当 C# 进行赋值(将值放入变量中)时,它也会返回被赋值的值。这个:
age = 20
返回一个值,20
你可以在另一个作业中使用它:
score = age = 20;
Age 是 20,因为我们给它赋值,它返回 20。Score 也是 20,因为我们给它赋值 (age=20)。分配(分配年龄的结果)到 score 也返回一个值.. 我们可以永远这样下去:
a=b=c=d=e=f...=x=y=z=20; //all 26 variables now have a value of 20
我们可以将返回值视为总和的元素,就像其他任何元素一样:
score = (age = 20) + 1;
将 20 分配给年龄,将 21 分配给得分,并返回 21
我们可以改变类型,就像我们可以说myString = 20.ToString()(是的,你可以像在变量上一样调用常量上的方法)我们可以这样说:
myString = (score = (age = 20) + 1).ToString();
将 20 分配给年龄,21 分配给得分,然后将返回的 21 转换为字符串并将“21”分配给 myString
--
好吧,够傻的了.. 但希望你能明白为什么
if(age = 20 && score < 50)
正在给出它所做的错误。 age 设置为 20,正在返回 20,并且正在使用 (score&&ed,这是一个返回布尔值的操作。这意味着就像你写的一样:
age = 20;
if(20 && score < 50)
简单明了是行不通的。干得好,这不是 JavaScript。
当然,您很可能想使用== 进行年龄比较,而不是使用= 进行作业。
..请记住,赋值也会产生值,这就是这个看起来很疯狂的循环起作用的原因:
while(null != x = stream.Read()) //loop while Read() doesn't return null
{
//use x, which certainly has a non null value
}
不过,在使用复合赋值和比较语句时,我会谨慎行事 - 它们的可读性远低于逐步拼写这些内容:
for(x = stream.Read(); x != null; x = stream.Read())