如何使用ReSharper将参数转换为Object Initializer
将长方法参数转换为对象初始化器的实现方案
1. 先定义对应的实体类
首先创建包含对应公共属性的TestClass,默认无参构造函数会自动生成,无需额外定义:
public class TestClass { public string A1 { get; set; } public string A2 { get; set; } public string A3 { get; set; } public string A4 { get; set; } public string A5 { get; set; } }
2. 调整重构工具设置(以ReSharper/Rider为例)
默认使用「Transform Parameters」重构时,工具会生成带参数的构造函数,修改设置可直接生成对象初始化器形式:
- 打开设置(快捷键
Ctrl+Alt+S) - 导航到
Editor → Code Style → C# → Code Generation - 在「Generate from parameters」相关选项中,选择生成公共属性而非带参构造函数
- 再次执行「Transform Parameters」重构,工具会自动生成对象初始化器的调用方式
3. 手动重构步骤(临时需求适用)
如果不想修改全局设置,可手动调整:
- 选中
GetTest方法的参数列表,右键选择Refactor → Transform Parameters - 在弹窗中创建新类
TestClass,此时工具会生成带参构造的版本 - 删除
TestClass的带参构造,添加对应的公共属性 - 将
Example方法中的构造函数调用修改为对象初始化器形式
最终完整代码
namespace Test.Test { public class TestClass { public string A1 { get; set; } public string A2 { get; set; } public string A3 { get; set; } public string A4 { get; set; } public string A5 { get; set; } } public class TestUtility { public void Example() { this.GetTest(new TestClass { A1 = "a1", A2 = "a2", A3 = "a3", A4 = "a4", A5 = "a5" }); } public void GetTest(TestClass testClass) { Console.WriteLine($"{testClass.A1}\t{testClass.A2}\t{testClass.A3}\t{testClass.A4}\t{testClass.A5}"); } } }
内容的提问来源于stack exchange,提问作者ericping
相关产品推荐
相关产品推荐

