Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 101
- Предыдущая
- 101/642
- Следующая
TesterMethod(null);В языке C# имеется маркер
nullnullnullstatic void TesterMethod(string[] args){ // Мы должны проверять на предмет null перед доступом к данным массива! Console.WriteLine($"You sent me {args?.Length} arguments.");}В этом случае условный оператор не применяется. Взамен к переменной массива
string?argsnullLengthnullConsole.WriteLine($"You sent me {args?.Length ?? 0} arguments.");Существуют дополнительные области написания кода, в которых
nullПонятие кортежей (нововведение и обновление в версии 7.0)
В завершение главы мы исследуем роль кортежей, используя проект консольного приложения по имени
FunWithTuplesoutКортежи, которые являются легковесными структурами данных, содержащими множество полей, фактически появились в версии C# 6, но применяться могли в крайне ограниченной манере. Кроме того, в их реализации C# 6 существовала значительная проблема: каждое поле было реализовано как ссылочный тип, что потенциально порождало проблемы с памятью и/или производительностью (из-за упаковки/распаковки).
В версии C# 7 кортежи вместо ссылочных типов используют новый тип данных
ValueTupleValueTupleОтносительно кортежей важно отметить два момента:
• поля не подвергаются проверке достоверности;
• определять собственные методы нельзя.
В действительности кортежи предназначены для того, чтобы служить легковесным механизмом передачи данных.
Начало работы с кортежами
Итак, достаточно теории, давайте напишем какой-нибудь код! Чтобы создать кортеж, просто повестите значения, подлежащие присваиванию, в круглые скобки:
("a", 5, "c")Обратите внимание, что все значения не обязаны относиться к тому же самому типу данных. Конструкция с круглыми скобками также применяется для присваивания кортежа переменной (или можно использовать ключевое слово
varvaluesstringint(string, int, string) values = ("a", 5, "c");var values = ("a", 5, "c");По умолчанию компилятор назначает каждому свойству имя
ItemXXItem1Item2Item3Console.WriteLine($"First item: {values.Item1}"); // Первый элементConsole.WriteLine($"Second item: {values.Item2}"); // Второй элементConsole.WriteLine($"Third item: {values.Item3}"); // Третий элементКроме того, к каждому свойству кортежа справа или слева можно добавить специфическое имя. Хотя назначение имен в обеих частях оператора не приводит к ошибке на этапе компиляции, имена в правой части игнорируются, а использоваться будут имена в левой части. Показанные ниже две строки кода демонстрируют установку имен в левой и правой частях оператора, давая тот же самый результат:
(string FirstLetter, int TheNumber, string SecondLetter) valuesWithNames = ("a", 5, "c");var valuesWithNames2 = (FirstLetter: "a", TheNumber: 5, SecondLetter: "c");Теперь доступ к свойствам кортежа возможен с применением имен полей, а также системы обозначений
ItemXConsole.WriteLine($"First item: {valuesWithNames.FirstLetter}");Console.WriteLine($"Second item: {valuesWithNames.TheNumber}");Console.WriteLine($"Third item: {valuesWithNames.SecondLetter}");// Система обозначений ItemX по-прежнему работает!Console.WriteLine($"First item: {valuesWithNames.Item1}");Console.WriteLine($"Second item: {valuesWithNames.Item2}");Console.WriteLine($"Third item: {valuesWithNames.Item3}");- Предыдущая
- 101/642
- Следующая
