Это так называемое «цепочечное присваивание» действительно противоречиво, и есть много вопросов по SO, которые его касаются.
Это побочный продукт присваивания, являющийся выражением, а не утверждением, как вы знаете,и многим это может сбить с толку.
На многих языках это несколько опасно для новичков.В языках, где []
является конструктором для пустых объектов массива, запись
a = b = []
делает a
и b
ссылкой на один и тот же объект.Новички склонны считать, что он создает два отдельных пустых массива, которые можно заполнять независимо.Не так!Эквивалент C #,
a = b = new SomethingOrOther();
, вероятно, гораздо менее вероятен, поскольку a
и b
с большей вероятностью будут инициализированы в точке объявления, и такие двойные назначения было бы реже, и, кроме того, программисты на C # с большей вероятностью увидят очевидное разделение в этом случае.
Хорошее обоснование для введения запрета на это в три раза:
- Это совершенно не нужно.
- Это подвержено ошибкам (как в массивепример выше).
Когда вы сталкиваетесь с склонными к ошибкам конструкциями, вам следует избегать их, потому что, избегая их, вы никогда не совершите эту конкретную ошибку.Конечно, в C # это может быть гораздо менее подвержено ошибкам, чем в других языках.