Но кажется в С# 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>()')
То есть залогирует строку с проблемой, а не просто название параметра!