Если вы хотите выучить новый язык, начните с основ. Ознакомьтесь с синтаксисом кода, грамматикой кода, как писать операторы (if, for, switch, …), классы, интерфейсы.
Но у каждого языка программирования есть свой набор «скрытых» функций, маленьких ярлыков и классных операторов, которые могут сэкономить ваше время и строки кода. Вы будете писать более качественный, лаконичный и читаемый код.
В этой статье я покажу вам 5 возможностей C#, о которых вы, вероятно, не знали. Так что давайте не будем терять время и начнем с первого.
1) Встроенный «using"
оператор
Если вы не знакомы с оператором using
, он определяет область, в конце которой объект будет удален. Это особенно полезно при безопасном выполнении операций ввода-вывода, например:
using (var connection = new SqlConnection(connectionString) { connection.Open(); [....] } //Here, the connection is already disposed for you
C# 8.0 представил новый способ написания операторов using
. По сути, вместо того, чтобы открывать блок, вы просто используете то же ключевое слово using
непосредственно перед объектом, который хотите удалить позже.
using var connection = new SqlConnection(connectionString) connection.Open(); [....]
Больше нет скобок и отступов; код стал более читаемым. Время жизни встроенного using
продлится до конца области, в которой он объявлен. Например, если вы используете соединение внутри функции, оно будет удалено, когда функция завершится. Приведенный выше пример кода аналогичен этому:
var connection = new SqlConnection(connectionString) connection.Open(); [....] connection.Close(); return;
2) Сокращенное выражение «переключатель»
Я думаю, вы все знакомы с оператором switch. Вы можете использовать это для написания сложных условных операций и операций ветвления.
switch (light.Status) { case ON: text = "Light is on"; break; case OFF: text = "Light is off"; break; default: text = "Unknown status"; break; }
Но в большинстве случаев вы будете использовать оператор switch для сопоставления одного значения с другим. Вот почему, начиная с C# 8.0, вы можете использовать switch expression
для вычисления одного выражения из списка возможных выражений. Вот тот же пример с switch expression
text = light.Status switch { ON => "Light is on", OFF => "Light is off", _ => "Unknown status" }
Вы только что написали то же самое, но в половину строк и более читабельно.
3) Операторы объединения с нулевым значением
При работе с типами, допускающими значение NULL, важно всегда проверять, являются ли переменные нулевыми, прежде чем что-либо с ними делать. И я уверен, что большинство из вас и я всегда полагались на операторы if для этого:
variable = MightReturnNull(); if(variable == null) { variable = "default"; }
Теперь есть лучший способ: оператор ??
возвращает значение своего левого операнда, если оно не равно null
; в противном случае он оценивает правый операнд и возвращает его результат. Покажем это в действии:
var variable = MightReturnNull() ?? "default";
Легко, верно? То же самое, только с одной строкой кода.
Существует даже еще один оператор, который работает с типами, допускающими значение NULL, — оператор присваивания, объединяющий значения NULL. Начиная с C# 8.0, вы можете использовать оператор ??=
для замены кода формы
if (variable is null) { variable = expression; }
со следующим
variable ??= expression;
4) Сокращенная инициализация объекта
В C# есть два стандартных способа объявить переменную. Вы можете написать тип значения или позволить компилятору автоматически назначить правильный тип на основе правильного назначения.
Car myCar = new Car(); var myCar = new Car();
Но есть и третий способ объявления переменных с помощью короткого ключевого слова new
.
Car myCar = new();
5) Пространства имен в файловой области
Это один из моих любимых, потому что он уменьшает отступ кода всего файла. Я до сих пор удивляюсь, почему Microsoft не добавила эту функцию раньше, ведь во многих языках она была с самого начала (например, в Java). С пространствами имен с файловой областью вы можете заменить код формы
namespace MyNamespace { class MyClass { public void MyMethod() { } } }
со следующим
namespace MyNameSpace; class MyClass { public void MyMethod() { } }
Это намного лучше, вам не нужно делать отступ в большей части кода; это более ясно и менее церемонно.
Заключение
В этой статье я рассмотрел пять самых скрытых функций C#. Со всеми этими небольшими советами C# становится намного удобнее. Код стал более четким, читабельным и лаконичным. И хотя Microsoft очень медленно внедряет новые функции (например, пространства имен в файловой области), все же здорово, что теперь мы можем извлечь из них пользу.
Вы уже знали все эти особенности? Дай мне знать в комментариях.