0

我有 GUI 和命令行应用程序都使用的公共类

这个类被传递了一个 ReportError 函数引用,它在 GUI 和 CommandLine 上的作用不同。

在图形用户界面中:

 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;
        }

所以我也更新了 Func 定义:

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

注意 ? 告诉它是可选参数

但是当我调用这个 ReportError 函数时,我得到一个编译器错误如下: CS7036: There is no argument given 对应于 Func<string, string?,int> 所需的形参 'arg2'

如果有人已经遇到过这种问题,我将不胜感激。

4

1 回答 1

0

是的,解决方案就在这里。

公共类声明了一个 ReportError 函数,其中包括 [CallerMemberName] 作为可选参数。

然后,此函数调用传递 2 个字符串的委托函数,而无需处理可选性。

于 2020-08-03T13:25:12.880 回答