Использование атрибута [CallerMemberName] с делегатом Fun c - PullRequest
0 голосов
/ 03 августа 2020

У меня есть общий класс, который используется как GUI, так и приложениями CommandLine

Этому классу передается ссылка на функцию ReportError, которая по-разному действует на GUI и CommandLine.

в GUI:

 public int GUIReportError(String ToLog)
    {
        MessageBox.Show(ToLog);
        return 0;
    }

в общих членах класса:

readonly Func<string, int> ReportError;

в общем конструкторе классов:

public CommonClass(Func<string, int> ReportErrorFunc)
{
   ReportError=ReportErrorFunc;
}

До сих пор все просто но я бы интегрировал атрибут [CallerMemberName] в свою функцию журнала

public int GUIReportError(String ToLog, [CallerMemberName] string CallingFunction="")
        {
            MessageBox.Show(ToLog, CallingFunction);
            return 0;
        }

Поэтому я также обновил определение Fun c:

 readonly Func<string,  string?, int> ReportError;

примечание udage of? чтобы указать это необязательный параметр

Но когда я вызываю эту функцию ReportError, я получаю следующую ошибку компилятора: CS7036: не указан аргумент, соответствующий обязательному формальному параметру 'arg2' веселья c

Если бы кто-нибудь уже сталкивался с подобной проблемой, я был бы очень признателен.

1 Ответ

0 голосов
/ 03 августа 2020

Да, решение здесь.

Общий класс объявляет функцию ReportError, которая включает [CallerMemberName] в качестве необязательного параметра.

Затем эта функция вызывает функцию делегата, передавая 2 строки без необходимости разобраться с опциональностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...