我有一个带有一些方法的库,在某些错误中我希望它调用调用者定义的方法。此方法必须返回bool。我的意思是:
Sock sock = new Sock();
sock.OnSpecificError(theMethodToCall);
然后当错误发生时,sock应首先检查是否已设置OnSpecificError。如果有,它应该运行它。如果该方法返回false或者尚未设置OnSepcificError,则应抛出异常。
这似乎是代表所设计的那种东西,但无论出于什么原因,我似乎无法理解那些实际上正在做的事情,例如,传递的是什么以及我如何运行它以后。我目前处理这个问题的方法很愚蠢,所以任何帮助都会非常感激。
编辑: 让我澄清一下。 sock.OnSpecificError(method)用于简单地传递sock一个方法,它将存储但不能运行。这个想法是后来的,当sock运行其他一些方法时,如果弹出错误,它应该运行该方法。我想保留稍后使用的方法,然后在需要时运行它。
答案 0 :(得分:3)
从代理开始的最简单方法是使用预定义的方法。例如,不带参数并返回bool
的委托将是Func<bool>
。获取string
和int
并返回bool
的代理人将为Func<string,int,bool>
,依此类推。
您可以像这样定义方法:
void OnSpecificError(Func<bool> errorCheck) {
// Do your stuff...
var gotErrors = errorCheck();
if (gotErrors) {
// Do something about it
}
}
您现在可以像这样致电OnSpecificError
:
sock.OnSpecificError(CheckForErrors);
private bool CheckForErrors() {
return errorCode.Equals("YES");
}
您还可以使用 lambdas 来内联小方法,如下所示:
sock.OnSpecificError(() => errorCode.Equals("YES"));