Большинство современных языков программирования содержит приблизительно одинаковый набор конструкций управления и C# не предлагает в этой области ничего радикально нового.
В С# используются обычные присваивания для простых переменных; структурные или массовые присваивания не поддерживаются.
Операторы ветвления тоже достаточно традиционны ( if , switch ), но обладают двумя особенностями. Во-первых, условие в операторе if должно вырабатывать именно булевское значение (т.е. целого значения, вырабатываемого при присваивании недостаточно), а во-вторых, каждая ветка case внутри оператора switch должна содержать явное указание о дальнейшем потоке управления (т.е. либо break , либо goto на какую-то переменную, например, на метку другой ветки).
Что касается циклов, то С# поддерживает вполне традиционные циклы, такие как do - while , while - do и циклы с итерацией for , но помимо этого, поддерживает перебор массивов и коллекций с помощью оператора foreach , как в следующем примере:
Hashtable ziphash = new Hashtable(); ... foreach (string zip in ziphash.Keys) { Console.WriteLine(zip + " " + ziphash[zip]); }
В этом примере надо обратить внимание на то, что перебираемый класс должен поддерживать интерфейс IEnumerator, а также на тот факт, что каждый извлекаемый из коллекции объект явным образом приводится к заявленному типу перебора (в нашем примере это string ).
Наконец, C# поддерживает структурную обработку исключений с помощью конструкций try , catch и finally . Исключения можно генерировать и явным образом с помощью конструкции throw .