Visual Studio 2017内联临时变量代码改写咨询
内联临时变量的完整改写代码及技术说明
嘿,我来给你拆解Visual Studio 2017里这个内联临时变量重构的完整代码和背后的细节!
完整改写后的代码
Visual Studio给出的正确完整重构代码会利用C# 7.0的模式匹配特性,既消除临时变量又保证逻辑不变:
using (Process proc = Setupprocess(comtorun)) { proc.Start(); while (!proc.StandardOutput.EndOfStream) { if (proc.StandardOutput.ReadLine() is string output && output.Contains("library:")) { collectoutput.Add(output.Split(":")[1]); } } }
如果你的项目还没启用C# 7.0及以上版本,也会有另一种安全的内联方式(本质是把临时变量的声明移到条件中,避免重复读取):
using (Process proc = Setupprocess(comtorun)) { proc.Start(); while (!proc.StandardOutput.EndOfStream) { string output; if ((output = proc.StandardOutput.ReadLine()) != null && output.Contains("library:")) { collectoutput.Add(output.Split(":")[1]); } } }
相关技术说明
1. 内联临时变量的核心逻辑
这是Visual Studio提供的代码重构功能,目标是消除无意义的临时变量,让代码更紧凑,同时严格保留原有业务逻辑。它只适用于满足以下条件的临时变量:
- 变量仅被赋值一次,且赋值后从未被修改
- 变量的所有使用都是直接引用它的初始值,没有复杂的依赖
2. 为什么不直接重复调用ReadLine()?
如果粗暴地把output替换成proc.StandardOutput.ReadLine(),会导致ReadLine()被调用两次(一次判断Contains,一次执行Split),这会错误地读取两行不同的内容,完全破坏原逻辑。Visual Studio的重构引擎会智能规避这个问题,所以才会用模式匹配或赋值判断的方式保证ReadLine()只执行一次。
3. 模式匹配版本的优势
C# 7.0引入的模式匹配变量声明,允许我们在if条件中直接声明并赋值变量,这样既消除了单独的临时变量声明行,又让逻辑更连贯——读者一眼就能看出来:我们读取一行内容,判断它是否符合条件,然后处理这行内容。
内容的提问来源于stack exchange,提问作者Isaac Morris
相关产品推荐
相关产品推荐

