TGViewer
C# Short Posts 🔞 C# Short Posts 🔞 @dimasshortposts · 310 subscribers
Post #3 91
В логах с прода всегда бесило, что нет никакой возможности посмотреть номер строки, в котором произошла ошибка.

Но кажется в С# 10 есть инструмент, который поможет хотя бы частично решить эту проблему

Новый атрибут времени компиляции [CallerArgumentExpression]

Кратко про суть:

Есть у вас есть такой код:
var array = Array.Empty<int>();

вы хотите проверить его на пустоту:

public static void ItIsNotEmpty<T>(
IEnumerable<T> value,
[CallerArgumentExpression("value")] string message = "")
{
if (!value.Any())
{
throw new ArgumentException("Sequence is empty", message);
}
}


И вызываете вашу функцию вот так:

EnsureThat.ItIsNotEmpty(array);

Вот как будет выглядеть ошибка, которую выкинет этот код:

System.ArgumentException: Sequence is empty (Parameter 'array')

Обратите внимание на то что находится в скобочках. Мы видим там не название параметра,а имя той переменной, что мы передали в скобочки. ТО ЕСТЬ если мы вызовем метод вот так:

EnsureThat.ItIsNotEmpty(Array.Empty<int>());

То ошибка станет вот такой:
System.ArgumentException: Sequence is empty (Parameter 'Array.Empty<int>()')

То есть залогирует строку с проблемой, а не просто название параметра!
More from @dimasshortposts
  1. Oct 7, 2026📦ReadyToRun: компилируем свой код заранее В прошлый раз я рассказывал, что методы библиот…
  2. Oct 2, 2026s
  3. Oct 2, 2026Post #503
  4. Sep 30, 2026🛤 Путь до Tier1: от чего он зависит В прошлый раз мы гоняли hello world в цикле и увидели…
  5. Sep 26, 2026🧵 Тредик для вопросов по докладу про MAF на дотнексте В докладе многие подробности опусти…
  6. Sep 23, 2026Даже самым хардкорным ребятам надо отдыхать, так что отдыхаем, мои чюваки 🕺 🧑‍💻dp🥁 #he…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →