You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#/VB.Net如何传递带实参的函数作为参数且延迟执行?

C# 实现方式

在C#中,我们可以利用.NET内置的Action委托(无参无返回值的委托类型),通过lambda表达式包裹带参数的函数调用,将其作为无参委托传递给目标函数,实现和JavaScript示例一致的逻辑:

using System;

class Program
{
    // 定义带参的目标函数
    static void FunctionToPass1(int x, int y)
    {
        Console.WriteLine($"{x} {y}");
    }

    static void FunctionToPass2(int x, int y, int z)
    {
        Console.WriteLine($"{x} {y} {z}");
    }

    // 接收普通参数和无参委托的主函数
    static void MainFunction(string param1, string param2, Action functionToPass)
    {
        Console.WriteLine($"{param1} {param2}");
        functionToPass(); // 执行传入的委托
    }

    static void Main()
    {
        // 用lambda表达式包裹带参函数调用,作为无参委托传递
        MainFunction("a", "b", () => { FunctionToPass2(1, 2, 3); });
    }
}
VB.Net 实现方式

VB.Net中可以使用Action委托结合匿名Sub,实现相同的功能:

Imports System

Module Program
    ' 定义带参的目标过程
    Sub FunctionToPass1(x As Integer, y As Integer)
        Console.WriteLine($"{x} {y}")
    End Sub

    Sub FunctionToPass2(x As Integer, y As Integer, z As Integer)
        Console.WriteLine($"{x} {y} {z}")
    End Sub

    ' 接收普通参数和无参委托的主过程
    Sub MainFunction(param1 As String, param2 As String, functionToPass As Action)
        Console.WriteLine($"{param1} {param2}")
        functionToPass.Invoke() ' 执行传入的委托
    End Sub

    Sub Main()
        ' 用匿名Sub包裹带参过程调用,作为无参委托传递
        MainFunction("a", "b", Sub() FunctionToPass2(1, 2, 3))
    End Sub
End Module

核心逻辑说明

两种实现的思路和JavaScript示例完全匹配:创建一个无参的委托/匿名函数,在其内部预先绑定好实际参数并调用目标函数,再将这个无参委托传递给主函数,由主函数在需要的时候执行它。

内容的提问来源于stack exchange,提问作者Dejan Dozet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:06:33