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

C#中能否在字段初始化器中直接使用多行代码块?

在C#字段初始化器中实现多行复杂逻辑的可行方案

你提到的直接用{}包裹多行代码的写法不合法,因为字段初始化器要求的是表达式,而代码块属于语句范畴,编译器无法直接将其转换为可赋值的结果。不过无需把逻辑移到单独方法,有两种直接在初始化器里实现的方案:

方案1:使用立即执行的Func委托

将多行逻辑封装到Func<string>委托的方法体中,然后立即调用这个委托获取返回值:

public class MyClass
{
    private string _stringField = new Func<string>(() =>
    {
        var stringGenerator = new StringGenerator();
        stringGenerator.SetSomething("bla");
        return stringGenerator.GetString();
    })();
}

方案2:C# 9.0+ 简化的目标类型推断写法

利用C# 9.0引入的目标类型推断,配合强制转换和立即执行,代码更简洁:

public class MyClass
{
    private string _stringField = ((Func<string>)() =>
    {
        var stringGenerator = new StringGenerator();
        stringGenerator.SetSomething("bla");
        return stringGenerator.GetString();
    })();
}

注意事项

  • 字段初始化器在类实例构造函数执行前运行,因此内部无法访问类的非静态实例成员(此时这些成员还未完成初始化)。
  • 如果需要处理异常,可以直接在委托的代码块内添加try-catch逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:40:03