无法修改底层API时,带out参数的连接状态检测if-else逻辑优化
方案1:C# 7.0+ 语法简化(无需额外封装)
利用C# 7及以上版本支持的out变量内联声明和弃元特性,直接合并变量声明到逻辑中,不用单独提前声明变量,代码更简洁:
// 写法1:用逗号运算符直接合并到if条件 if (IsConnected(out bool isConnected), isConnected) { OperateOnStream(); } else { Connect(); }
如果不习惯逗号运算符,也可以用弃元接收无意义的返回值,写法更易读:
// 写法2:弃元接收无用返回值,逻辑更直观 _ = IsConnected(out bool isConnected); if (isConnected) { OperateOnStream(); } else { Connect(); }
注:这里的bool变量是栈上分配的极小值,JIT编译优化后不会产生任何额外性能开销,你感知到的「多余变量、效率低」只是语法层面的书写差异,运行时和原生逻辑性能完全一致。
方案2:封装扩展方法(还原最理想的调用逻辑)
如果要批量使用这个检测逻辑,直接针对API所属类封装扩展方法即可,完全不需要修改底层API:
public static class ConnectionExtensions { // 替换参数类型为你调用IsConnected的实例的实际类型 public static bool CheckConnected(this YourConnectionClass instance) { // 丢弃无意义的Result返回值 _ = instance.IsConnected(out bool connected); return connected; } }
封装完成后就可以直接使用你最初设想的逻辑:
if (connection.CheckConnected()) { OperateOnStream(); } else { Connect(); }
注意事项
如果后续底层API调整,Result类型新增了错误状态返回,只需要修改扩展方法内部的逻辑做异常处理即可,上层调用代码不需要改动,可维护性更高。
内容的提问来源于stack exchange,提问作者jam
相关产品推荐
相关产品推荐

