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
相关产品推荐
相关产品推荐

