Получить передаваемое имя параметра

220
17 июня 2022, 18:30

хочу реализовать метод, проверяющий переданный параметр на null. В случае, если параметр равен null, то кидаю исключение. Так вот, в этом исключении хотелось бы видеть название данного параметра (т.е. название непосредственно из самого вызова метода). Сейчас идея такая:

Вызов проверки:

        ArgumentChecker.CheckNullArgument(() => nickname);
        ArgumentChecker.CheckNullArgument(() => role);
        ArgumentChecker.CheckNullArgument(() => hashPassword);

Метод для проверки:

    public void CheckNullArgument<T>(Func<T> argumentFunc)
        where T : class
    {
        T value = argumentFunc();
        if (value is null)
        {
            var name = argumentFunc.Method
                .ReflectedType
                .GetRuntimeFields()
                .First()
                .Name;
            exceptionManager.NullArgument(name);
        }
    }

При такой реализации argumentFunc всегда имеет Target со всеми именами параметров (в вызывающем методе они также переданы в виде параметров), из-за чего я всегда получаю имя первого параметра.

В общем, хотелось бы увидеть более лаконичное решение этой задачи

Answer 1
using System.Linq.Expressions;
public void CheckNullArgument<T>(Expression<Func<T>> argumentFunc)
    where T : class
{
    T value = argumentFunc.Compile()();
    if (value is null)
    {
        var expressionBody = (MemberExpression)argumentFunc.Body;
        string name = expressionBody.Member.Name;
        exceptionManager.NullArgument(name);
    }
}
READ ALSO
Как получить доступ к MeshTextPro в unity 2d?

Как получить доступ к MeshTextPro в unity 2d?

в 2d игре на unity пишет такую ошибку при попытке подключения к TextMeshPro через c# код TextMeshPro в UI unity 2020

301
Использование Google Maps в Xamarin

Использование Google Maps в Xamarin

Хотелось бы узнать, можно ли использовать API Google Карт для отображения конкретных ближайших магазинов на карте? Вкратце: есть мобильное приложение...

232
Как убрать пунктирную линию в ComboBoxItem?

Как убрать пунктирную линию в ComboBoxItem?

Как убрать пунктирную линию в ComboBoxItem? Она появляеться при нажатии и наведении

238
Повторить символы в cтроке

Повторить символы в cтроке

Есть символЛюбой

362