【发布时间】:2020-08-03 12:41:43
【问题描述】:
我有 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:没有给出与 Func
如果有人遇到过这种问题,我将不胜感激。
【问题讨论】:
-
这能回答你的问题吗? Optional arguments in a generic Func<>
-
string?并不表示该参数是可选的。string?是Nullable<string>的缩写 -
string?与string相同,因为在 C# 中strings可以是null。请注意,这不会使参数成为可选参数。 -
@Sinatr,感谢您的快速支持。您的第二条评论使我认为我必须将问题分成两部分:首先,我将在我的公共类中创建一个附加函数,该函数将通过 [CallerMemberName] 属性收集调用函数的名称,然后将其传递给日志函数。
标签: c# delegates callermembername