Если вы хотите выучить новый язык, начните с основ. Ознакомьтесь с синтаксисом кода, грамматикой кода, как писать операторы (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 очень медленно внедряет новые функции (например, пространства имен в файловой области), все же здорово, что теперь мы можем извлечь из них пользу.

Вы уже знали все эти особенности? Дай мне знать в комментариях.