Как обработать "return if not null" в одну строку

  • Михаил
  • 8 мин. на прочтение
  • 222
  • 31 May 2024
  • 31 May 2024

Для возврата значения, если оно не равно null, с помощью в C# можно использовать несколько подходов. Выбор конкретного способа проверки на null зависит от конкретной ситуации и предпочтений разработчика. Оператор is null и оператор ?. часто являются предпочтительными вариантами, так как они более читаемы и удобны в использовании. Вот несколько примеров

1. Используя ?. (null-conditional operator):

?. (null-conditional operator) - это оператор в C#, который позволяет безопасно обращаться к членам объекта, даже если сам объект равен null.

string myString = "Hello";
string result = myString?.ToUpper();
Console.WriteLine(result); // Вывод: "HELLO"
myString = null;
result = myString?.ToUpper();
Console.WriteLine(result); // Вывод: null

Этот оператор особенно полезен при работе с иерархическими или вложенными объектами, где вы можете последовательно обращаться к их членам, не беспокоясь о том, что один из объектов по пути может быть равен null.

2. Используя ?: (conditional operator):

?: (conditional operator) - это тернарный оператор в C#, который позволяет выполнять простые условные операции в одну строку кода.

string myString = "Hello";
string result = (myString != null) ? myString.ToUpper() : null;
Console.WriteLine(result); // Вывод: "HELLO"
myString = null;
result = (myString != null) ? myString.ToUpper() : null;
Console.WriteLine(result); // Вывод: null

3. Используя ?? (null-coalescing operator):

?? (null-coalescing operator) - это оператор в C#, который возвращает левый операнд, если он не равен null, в противном случае возвращает правый операнд.

string myString = "Hello";
string result = myString?.ToUpper() ?? "Default";
Console.WriteLine(result); // Вывод: "HELLO"
myString = null;
result = myString?.ToUpper() ?? "Default";
Console.WriteLine(result); // Вывод: "Default"

4. Используя лямбда-выражение и GetValueOrDefault():

string myString = "Hello";
string result = ((Func)(() => myString?.ToUpper()))();
Console.WriteLine(result); // Вывод: "HELLO"
myString = null;
result = ((Func)(() => myString?.ToUpper()))();
Console.WriteLine(result); // Вввод: null

5. Используя LINQ и Select():

string[] strings = { "Hello", null, "World" };
var results = strings.Select(s => s?.ToUpper()).ToList();
foreach (var r in results)
{
   Console.WriteLine(r); // Вывод: "HELLO", null, "WORLD"
}

Все эти примеры демонстрируют, как можно обработать возврат значения, если оно не равно null, в одну строку с использованием различных операторов и методов C#. Выбор конкретного подхода зависит от предпочтений разработчика и контекста задачи.

Ссылки с примерами:

C# how to 'return if not null' in a one liner?

What is the proper way to check for null values?