Это разрешено:
int a, b, c;
a = b = c = 16;
string s = null;
while ((s = "Hello") != null) ;
Насколько я понимаю, назначение s = "Hello"; должно приводить к "Hello" для "Hello" для s, но операция не должна возвращать какое-либо значение. Если это правда, то ((s = "Hello") != null) приведет к ошибке, так как null будет сравниваться ни с чем.
В чем заключается причина, позволяющая операторам присваивания возвращать значение?