Например, рассмотрим следующий оператор защиты:
Код: Выделить всё
public static T NotNull(
[NotNull] T? value,
string? message = null,
ExceptionType exceptionType = ExceptionType.ArgumentOutOfRange,
[CallerArgumentExpression(nameof(value))] string? paramName = default
)
{
if (value is not null)
{
return value;
}
string innerMessage = $"Value cannot be null. {message}".TrimEnd();
if (exceptionType == ExceptionType.ArgumentOutOfRange)
{
throw new ArgumentOutOfRangeException(paramName, value, innerMessage);
}
else if (exceptionType == ExceptionType.InvalidValueException)
{
throw new UnexpectedNullException(paramName, value, innerMessage);
}
throw new NotImplementedException($"Exception type not implemented {exceptionType}");
}
Код: Выделить всё
public async Task DoSomething(SomeObject obj)
{
Guard.NotNull(obj, "Additional error details");
... do something...
}
Код: Выделить всё
public class SomeObject(SomeOtherObject someValue)
{
public SomeOtherObject SomeValue { get; } = Guard.NotNull(someValue, "Additional error details")
}
Однако обходной путь будет простым (иметь две разные функции (
Код: Выделить всё
NotNull(...)Я не знаю Я не особо доверяю тестам, которые я бы проводил лично, поскольку предполагаю, что компилятор или другие оптимизации могут повлиять на результаты непонятным мне образом (я не очень знаком с этой темой).
Если это актуально, используется .NET 9.
Подробнее здесь: https://stackoverflow.com/questions/791 ... arely-used
Мобильная версия