C# 是否可以将一个函数发送给另一个返回类型相同但参数不同的函数?

C# 是否可以将一个函数发送给另一个返回类型相同但参数不同的函数?,c#,C#,我有一个AttachmentService.cs类,当前用于将图像上载到数据库和/或云存储容器。当上传到云时,我有一些重试逻辑,当被两个不同的方法调用时,我希望重用这些逻辑。我希望将每个函数作为参数传入,然后从传入的方法中调用它们。以下是我目前拥有的两个签名: C# //示例:我希望能够传递第一个函数和第二个函数 //我确信它可以通过泛型实现,但目前似乎无法实现 私有AttachmentUploadResult UploadAttachmentToGLS(Func uploadFunction)

我有一个AttachmentService.cs类,当前用于将图像上载到数据库和/或云存储容器。当上传到云时,我有一些重试逻辑,当被两个不同的方法调用时,我希望重用这些逻辑。我希望将每个函数作为参数传入,然后从传入的方法中调用它们。以下是我目前拥有的两个签名:

C#

//示例:我希望能够传递第一个函数和第二个函数
//我确信它可以通过泛型实现,但目前似乎无法实现
私有AttachmentUploadResult UploadAttachmentToGLS(Func uploadFunction)
私有AttachmentUploadResult UploadAttachmentToGLS(Func uploadFunction)
我想上面的代码只有一个签名,可以采取任何一个

Func uploadFunction
Func uploadFunction
使我的方法看起来像这样:

private AttachmentUploadResult UploadAttachmentToGLS(Func<parameters, AttachmentUploadResult>uploadFunction)
{
    //Some retry logic
    uploadFunction(parameters);
    //Some more retry logic
}
Upload(() => SomeUploadMethod(theActual, parameters, toTheMethod));
private AttachmentUploadResult UploadAttachmentToGLS(FuncuploadFunction)
{
//一些重试逻辑
上传功能(参数);
//更多重试逻辑
}

有什么方法可以实现上述目标吗?我已经阅读了Func,不认为这是正确的委托使用。

函数的签名可以是
Func
-您并不真正关心
UploadAttachment
方法中的参数,因此应该关闭它们。然后,该调用可能会如下所示:

private AttachmentUploadResult UploadAttachmentToGLS(Func<parameters, AttachmentUploadResult>uploadFunction)
{
    //Some retry logic
    uploadFunction(parameters);
    //Some more retry logic
}
Upload(() => SomeUploadMethod(theActual, parameters, toTheMethod));

它还允许您对
UploadAttachment
方法隐藏实现的详细信息-您所关心的只是“这是当我要进行上传时要调用的函数”。

参数仅在方法内部已知,因此您将无法包装它。据我所知,这个问题对我来说似乎是正确的答案,谢谢!我对重试函数的调用代码:
public override AttachmentUploadResult SyncUploadAttachment(字符串tableName,Guid rowGuid,byte?[]解压缩数据字节,字符串文件名){return UploadAttachmentToGLS(()=>{return AnotherService.SyncUploadAttachment(tableName,rowGuid,decompressedBytes,fileName);}
在我看来,使用两个方法重载的方法是正确的。这两个方法都有不同的参数(不同的委托类型)显然,这必须以不同的方式处理。环顾一下框架库提供的类,您会注意到提供/声明方法重载是一种常见的方法。无需在方法声明方面过于巧妙…;-)