Язык программирования C#9 и платформа .NET5
Часть 72 из 642 Информация о книге
var largeArray = new int[] { 10, 20, 30, 40, 50 };int index = 7;ref int refValue = ref ((index < 5)? ref smallArray[index]: ref largeArray[index - 5]);refValue = 0;index = 2;((index < 5)? ref smallArray[index]: ref largeArray[index - 5]) = 100;Console.WriteLine(string.Join(" ", smallArray));Console.WriteLine(string.Join(" ", largeArray));}Если вы не знакомы с ключевым словом
, то переживать пока не стоит, т.к. оно будет подробно раскрыто в следующей главе. В первом примере возвращается ссылка на местоположение массива с условием, которая присваивается переменнойref. С концептуальной точки зрения считайте ссылку указателем на позицию в массиве, а не на фактическое значение, которое в ней находится. Это позволяет изменять значение в позиции массива напрямую, изменяя значение, которое присвоено переменнойrefValue. Результатом установки значения переменнойrefValueвrefValueбудет изменение значений второго массива: 10,20,0,40,50. Во втором примере значение во второй позиции первого массива изменяется на 100, давая в результате 1,2,100,4,5.0Использование логических операций
Для выполнения более сложных проверок оператор
может также включать сложные выражения и содержать операторыif. Синтаксис идентичен своим аналогам в языках С (C++) и Java. Для построения сложных выражений язык C# предлагает вполне ожидаемый набор логических операций, которые описан в табл. 3.10.elseНа заметку! Операции
и&&при необходимости поддерживают сокращенный путь выполнения. Другими словами, после того, как было определено, что сложное выражение должно дать в результате||, оставшиеся подвыражения вычисляться не будут. Если требуется, чтобы все выражения вычислялись безотносительно к чему-либо, тогда можно использовать операцииfalseи&.|Использование оператора switch
Еще одной простой конструкцией C# для реализации выбора является оператор
. Как и в остальных основанных на С языках, операторswitchпозволяет организовать выполнение программы на основе заранее определенного набора вариантов. Например, в следующем коде для каждого из двух возможных вариантов выводится специфичное сообщение (блокswitchобрабатывает недопустимый выбор):default// Switch on a numerical value.static void SwitchExample(){Console.WriteLine("1 [C#], 2 [VB]");Console.Write("Please pick your language preference: ");// Выберите предпочитаемый язык:string langChoice = Console.ReadLine();int n = int.Parse(langChoice);switch (n){case 1:Console.WriteLine("Good choice, C# is a fine language.");// Хороший выбор. C# - замечательный язык.break;case 2:Console.WriteLine("VB: OOP, multithreading, and more!");// VB: ООП, многопоточность и многое другое!break;default:Console.WriteLine("Well...good luck with that!");// Что ж... удачи с этим!break;}}На заметку! Язык C# требует, чтобы каждый блок
(включаяcase), который содержит исполняемые операторы, завершался операторомdefault,returnилиbreakво избежание сквозного прохода по блокам.gotoОдна из замечательных особенностей оператора
в C# связана с тем, что вдобавок к числовым значениям он позволяет оценивать данныеswitch. На самом деле все версии C# способны оценивать типы данныхstring,char,string,bool,intиlong. В следующем разделе вы увидите, что в версии C# 7 появились дополнительные возможности. Вот модифицированная версия оператораenum, которая оценивает переменную типаswitch:stringstatic void SwitchOnStringExample(){Console.WriteLine("C# or VB");Console.Write("Please pick your language preference: ");string langChoice = Console.ReadLine();switch (langChoice.ToUpper()){case "C#":Console.WriteLine("Good choice, C# is a fine language.");break;
