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

C#委托初始化简写咨询:如何直接传递内联委托?

更简洁的内联委托写法

当然有更紧凑的实现方式!你想要直接在方法参数里内联定义委托的需求,C#提供了两种常用的语法来满足,都比先单独定义方法再传递的写法更简洁:

1. 使用匿名方法(C# 2.0及以上支持)

这是早期版本就支持的内联写法,用delegate关键字直接把委托逻辑写在参数位置:

static void Main(String[] args)
{
    DoSomething(delegate(int foo) 
    { 
        int x = foo; 
    });
}

匿名方法不需要给方法单独命名,编译器会自动匹配对应的委托类型,直接完成逻辑的传递。

2. 使用Lambda表达式(C# 3.0及以上支持)

这是现在C#开发中更常用、更简洁的方式,用=>符号连接参数和方法体:

完整明确写法

static void Main(String[] args)
{
    DoSomething((int foo) => 
    { 
        int x = foo; 
    });
}

编译器推断简化写法

因为编译器能根据DoSomething的参数类型(SampleDelegate)自动推断参数类型,所以可以进一步精简:

// 省略参数类型,单个参数还能省略括号
static void Main(String[] args)
{
    DoSomething(foo => 
    { 
        int x = foo; 
    });
}

单行逻辑极致简化

如果你的委托逻辑只有一行代码,还能省略大括号:

static void Main(String[] args)
{
    DoSomething(foo => int x = foo);
    // 比如如果是打印操作,还能写成:DoSomething(foo => Console.WriteLine(foo));
}

为什么你的写法会报错?

你尝试的void(int foo) { int x = foo; }不是C#的合法语法,C#里没有这种直接在参数位置定义无命名方法的写法,必须通过delegate关键字(匿名方法)或者Lambda表达式的=>语法来实现内联委托。

额外小建议:如果你的SampleDelegate只是接收一个int参数且无返回值,其实可以直接用.NET内置的Action<int>委托类型,这样就不用自己定义SampleDelegate了,代码会更通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:36:02