Null Checking Patterns
Часть раздела Логика и управление потоком путешествия по C# на Coddy — урок 33 из 66.
Проверка на null является неотъемлемой частью написания надежного кода на C#. Существует несколько шаблонов, которые вы можете использовать для безопасной проверки значений на null.
Давайте рассмотрим некоторые распространённые шаблоны проверки на null:
Сначала базовая проверка на null:
string name = null;
if (name == null)
{
Console.WriteLine("Name is null");
}
Еще один распространенный шаблон — оператор условного нулевого значения (?.), который безопасно обращается к членам потенциально null-объектов:
string name = null;
int? length = name?.Length; // length будет null
Оператор нулевого слияния (??) предоставляет значение по умолчанию, когда выражение равно null:
string name = null;
string displayName = name ?? "Unknown"; // displayName will be "Unknown"
Вы также можете объединять эти паттерны в цепочку для более сложных сценариев:
string name = null;
int length = (name ?? "").Length; // length will be 0
Метод string.IsNullOrWhiteSpace() проверяет, является ли строка null, пустой или содержит только пробельные символы. Это удобный способ проверить строковый ввод за один вызов:
string name = null;
if (string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("No name provided"); // this will print
}
string blank = " ";
if (string.IsNullOrWhiteSpace(blank))
{
Console.WriteLine("Blank name provided"); // this will also print
}
Используйте string.IsNullOrWhiteSpace(), когда хотите рассматривать null, пустые строки и строки, содержащие только пробелы, как эквивалентный недопустимый ввод.
Задание
ЛегкоСоздайте метод с именем processUserName, который принимает строковый параметр userName. Метод должен:
- Если
userNameравен null, вернуть "No user provided" - Если
userNameпустой или содержит только пробелы, вернуть "Invalid username" - В противном случае вернуть "Welcome, [userName]!", где [userName] — это фактическое имя пользователя
Не забудьте использовать подходящие шаблоны проверки на null.
Шпаргалка
Используйте == null для базовой проверки на null:
if (name == null)
{
Console.WriteLine("Name is null");
}Используйте оператор условной нулевости ?. для безопасного доступа к членам:
int? length = name?.Length; // length will be null if name is nullИспользуйте оператор слияния с null ?? для предоставления значений по умолчанию:
string displayName = name ?? "Unknown";Используйте string.IsNullOrWhiteSpace() для проверки строк, которые являются null, пустыми или содержат только пробелы:
if (string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("Name is null, empty, or whitespace");
}Цепочка операторов для сложных сценариев:
int length = (name ?? "").Length; // length will be 0 if name is nullПопробуйте сами
using System;
class ProcessUserName
{
public static string processUserName(string userName)
{
// Напишите свой код здесь
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety