如何将Tuple<..>重构为带描述性名称的类型化类?求高效重构工具
这种到处都是ItemN的Tuple代码确实让人头大,我刚好处理过类似的遗留项目,给你推荐几个能大幅提升重构效率的工具和方法:
Visual Studio 自带重构功能
如果你用的是Visual Studio 2019及以上版本,它原生就支持Tuple转自定义类/结构体的重构。操作很简单:找到任意一处Tuple<...>的声明或使用(比如var myTuple = new Tuple<int, string, bool>(1, "test", true);或者myVar = myTuple.Item4;),右键点击,选择「快速操作和重构」,然后找到「将元组转换为类」(或结构体)的选项。接下来你可以给生成的类命名,给每个属性设置有意义的名称,IDE会自动遍历整个代码库,把所有引用该Tuple的Item1、Item4这类调用替换成对应的属性名,完全不用手动逐个改,非常省心。JetBrains ReSharper/Rider
如果你用ReSharper插件(或者JetBrains自家的Rider IDE),它的重构能力会更智能。比如ReSharper里有「Convert Tuple to Class」的专门选项,不仅能快速生成带属性的类,还会根据代码上下文给属性推荐合适的名称(比如如果Item2是用来存用户名的,它可能会建议命名为UserName)。对于大型代码库,它还支持批量预览所有要修改的地方,确认无误后再执行替换,能有效避免误改,效率比原生IDE还要高一些。正则表达式辅助(应急用)
如果你暂时没有上述IDE工具,或者需要先做一轮初步的批量替换,可以用正则表达式来处理。比如在代码编辑器的查找替换功能里,用正则(\w+)\.Item(\d+)匹配所有xxx.ItemN的调用,然后替换成$1.YourDescriptiveName$2(当然你得先提前定义好对应的类和属性)。不过这个方法不够智能,容易出现误替换的情况,适合配合IDE重构一起用,先做粗处理再精细化调整。
重构小提醒
重构的时候记得几点:一是根据原来Tuple的使用场景选择生成类还是结构体(如果是不可变的场景,结构体可能更合适);二是重构后一定要跑一遍单元测试,确保逻辑没有被破坏;三是大型代码库建议分模块逐步重构,不要一次性全改完,降低风险。
内容的提问来源于stack exchange,提问作者g.pickardou

