TG Telegram Group & Channel
.NET Разработчик | United States America (US)
Create: Update:

День 2306. #ЗаметкиНаПолях
Проверка на null, Которая не Проверяет на null
Рассмотрим следующий код:

string Test1(List<string> strs)
{
if(strs is [var s])
{
if (s.Length > 0)
return s;
}
return string.Join(",", strs);
}

Мы сопоставляем массив строк с шаблоном (массив из одного элемента) и, если этот элемент не пустая строка, выводим его. Код красивый и краткий. Но мы внезапно получаем ошибку NullReferenceException во время выполнения.

Посмотрим на пример в SharpLab, что поможет быстро понять, что происходит «под капотом» для подобного синтаксиса.

Вы можете видеть 3 версии проверки по приведённой выше ссылке:
// if (text.Length > 0)
// нет проверки на null!!!
if(strs is [var s])

// if (text != null && text.Length > 0)
if(strs is [string s])

// if (text != null && text.Length > 0)
if(strs is [{} s])


Оказывается, есть различие между шаблоном var (допускает null) и шаблоном не-var. Третий вариант — это шаблон не-null, который делает то же самое (но не требует явного указания типа). Обычно var используется вместо явного типа лишь для удобства чтения, но здесь у нас есть реальная разница в поведении.

Источник: https://ayende.com/blog/202403-B/the-null-check-that-didnt-check-for-nulls

День 2306. #ЗаметкиНаПолях
Проверка на null, Которая не Проверяет на null
Рассмотрим следующий код:
string Test1(List<string> strs)
{
if(strs is [var s])
{
if (s.Length > 0)
return s;
}
return string.Join(",", strs);
}

Мы сопоставляем массив строк с шаблоном (массив из одного элемента) и, если этот элемент не пустая строка, выводим его. Код красивый и краткий. Но мы внезапно получаем ошибку NullReferenceException во время выполнения.

Посмотрим на пример в SharpLab, что поможет быстро понять, что происходит «под капотом» для подобного синтаксиса.

Вы можете видеть 3 версии проверки по приведённой выше ссылке:
// if (text.Length > 0)
// нет проверки на null!!!
if(strs is [var s])

// if (text != null && text.Length > 0)
if(strs is [string s])

// if (text != null && text.Length > 0)
if(strs is [{} s])


Оказывается, есть различие между шаблоном var (допускает null) и шаблоном не-var. Третий вариант — это шаблон не-null, который делает то же самое (но не требует явного указания типа). Обычно var используется вместо явного типа лишь для удобства чтения, но здесь у нас есть реальная разница в поведении.

Источник: https://ayende.com/blog/202403-B/the-null-check-that-didnt-check-for-nulls


>>Click here to continue<<

.NET Разработчик




Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)