Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将一个子例程作为参数传递给另一个子例程_C#_Vb.net - Fatal编程技术网

C# 将一个子例程作为参数传递给另一个子例程

C# 将一个子例程作为参数传递给另一个子例程,c#,vb.net,C#,Vb.net,我编写了一个sub,它从access数据库表创建excel文件。 我将一些参数传递给sub,这样我就可以在项目中的任何访问表中重用它 我想添加另一个参数,但我不知道如何操作:我需要创建的每个excel文件都有不同的summery工作表,因此为了完成此操作,我需要传递一个不同的子参数作为参数(就像Jquery中的子参数一样)。所以我的问题是,我如何将一个子例程作为参数传递给另一个子例程?ExportToExcelFromAccess()子文件将执行保存excel文件之前传递的子文件 标记为C#,我

我编写了一个sub,它从access数据库表创建excel文件。 我将一些参数传递给sub,这样我就可以在项目中的任何访问表中重用它

我想添加另一个参数,但我不知道如何操作:我需要创建的每个excel文件都有不同的summery工作表,因此为了完成此操作,我需要传递一个不同的子参数作为参数(就像Jquery中的子参数一样)。所以我的问题是,我如何将一个子例程作为参数传递给另一个子例程?ExportToExcelFromAccess()子文件将执行保存excel文件之前传递的子文件

标记为C#,我假设C#中的传递方法与VB非常相似

Public Sub ExportToExcelFromAccess(ByVal accessFilePath As String, ByVal accesspassword As String, ByVal AccessFileTable As String, ByVal exWbNameForTempFolder As String, ByVal xlWsName As String, ByVal promtTheUserBeofore As Boolean, Optional ByVal columnsNames() As String = Nothing)

' doing stuff

end sub

ExportToExcelFromAccess可以有一个Func或Action参数


另一种方法是使用委托。

为了准确执行您要求的操作,您可以使用lambda表达式:

Dim myAction As Action() = Sub() WriteYouLogicHereToCreateTheWorksheet()
可以在导出方法中使用

Sub ExportToExcelFromAccess(ByVal accessFilePath As String, createAction As Action(), ...)
    createAction()
End Sub

ExportToExcelFromAccess(filePath, myAction)
更惯用的方法是通过继承/接口使用多态性:

Public Interface IWorksheetCreator
    Sub CreateWorksheet()
End Interface

Public Class MyWorksheetCreator Implements IWorksheetCreator
    Sub CreateWorksheet() Implements IWorksheetCreator.CreateWorksheet
        WriteYouLogicHereToCreateTheWorksheet()
    End Sub
End Class

Sub ExportToExcelFromAccess(ByVal accessFilePath As String, _ 
   createAction As IWorksheetCreator)
    createAction.CreateWorksheet()
End Sub

'Create an instance of the class holding your desired logic
Dim myAction As New MyWorksheetCreator()
ExportToExcelFromAccess(filePath, myAction)

不是
Func
Action
委托吗?在某些用例中,您必须使用委托而不是Action或Func。谢谢你,这正是我需要的。但是成语的意思是什么呢?(在google translate上找不到)你是说更专业吗?对于ideomatic,我的意思是与你通常在语言/框架/上下文中解决特定问题的方式一致。