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

C#如何在try块中初始化变量并在块外使用以减少冗余代码

方案1:通用异常处理工具方法(最推荐)

你可以预先定义一个通用的静态工具类封装异常处理逻辑,使用时完全不需要显式声明变量类型,也不会拆分变量的声明和初始化,完美符合你对不可变性的要求:

// 预先定义通用工具类,整个项目可复用
public static class ExceptionUtil
{
    public static T ExecuteWithHandling<T, TException>(Func<T> operation, Action<TException> errorHandler) 
        where TException : Exception
    {
        try
        {
            return operation();
        }
        catch (TException ex)
        {
            errorHandler(ex);
            throw;
        }
    }
}

业务代码使用时写法非常简洁:

var foo = ExceptionUtil.ExecuteWithHandling(GetFoo, (FooException _) =>
{
    Console.Write(...);
});
var bar = GetBar(foo);

方案2:局部函数封装

如果不想引入通用工具类,可以用局部函数把初始化和异常处理逻辑包在一起,可读性高,适合处理逻辑较复杂的场景:

var foo = GetSafeFoo();
var bar = GetBar(foo);

// 局部函数定义
FooType GetSafeFoo()
{
    try
    {
        return GetFoo();
    }
    catch (FooException)
    {
        Console.Write(...);
        throw;
    }
}

方案3:立即执行Lambda(单次快速使用)

如果是单次临时使用,不想额外定义方法,可以用立即执行的Lambda表达式,不需要拆分变量声明和初始化:

var foo = ((Func<FooType>)(() =>
{
    try
    {
        return GetFoo();
    }
    catch (FooException)
    {
        Console.Write(...);
        throw;
    }
}))();
var bar = GetBar(foo);

所有方案的foo变量都是在声明时完成赋值,完全符合不可变性的要求,不会产生无用的初始值,也不需要手动显式声明foo的类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:36:03