引入参数重构
此重构允许您通过添加一个新参数,将表达式从方法实现移动到其调用方。 表达式的所有出现都被新参数替换;解决方案中对该方法的所有调用都更新为使用新的参数。
在下面的示例中,我们使用此重构将两个相同字符串的出现替换为一个参数。 字符串本身被移动到调用方的参数中:
abstract class Shape
{
public void Draw()
{
try { /*draw*/ }
catch (Exception e)
{
LogError(e);
}
}
static void LogError(Exception ex)
{
Console.WriteLine("Something has failed...");
File.WriteAllText(@"c:\Error.txt", "Something has failed..." + ex);
}
}
abstract class Shape
{
public void Draw()
{
try { /*draw*/ }
catch (Exception e)
{
LogError(e, "Something has failed...");
}
}
static void LogError(Exception ex, string message)
{
Console.WriteLine(message);
File.WriteAllText(@"c:\Error.txt", message + ex);
}
}
如果您想作为参数传递的表达式引用了方法体中声明的变量,JetBrains Rider 允许您通过引入一个泛型委托参数并使用它从调用方传递一个 lambda 表达式来“封装”这些变量。 在下面的示例中,我们为 "当前时间是:" + currentTme 表达式调用了重构:
static void PrintCurrentTime()
{
var currentTme = DateTime.Now.ToString("h:mm:ss tt");
Console.WriteLine("The current time is: " + currentTme);
}
private void Test1()
{
PrintCurrentTime();
}
static void PrintCurrentTime(Func<string, string> output)
{
var currentTme = DateTime.Now.ToString("h:mm:ss tt");
Console.WriteLine(output(currentTme));
}
private void Test1()
{
PrintCurrentTime(currentTme => "The current time is: " + currentTme);
}
为选定的表达式引入一个参数
在编辑器中,选择方法或构造函数中的一个表达式。
请执行以下操作之一:
按下 Ctrl+Alt+P。
按 Ctrl+Alt+Shift+T 然后选择 引入参数。
在主菜单中选择 。
如果找到多个选定表达式的出现,JetBrains Rider 会显示下拉菜单,您可以选择将重构应用于所有出现的地方或仅应用于当前的一个。
在出现的 引入参数 对话框中,输入新参数的名称。
如果选定的表达式是常量或值类型,您可以将该表达式用作引入参数的默认值。 为此,请选中 设为默认 复选框。
如果选定的表达式依赖于其他变量,这些变量会出现在 选择要转换为 lambda 的变量 部分中。 选择您希望在泛型委托中使用的变量(在这种情况下,这些变量将作为参数添加)。
要应用重构,请点击 下一步。
如果未发现冲突,JetBrains Rider会立即执行重构。 否则,它会提示您 解决冲突。

最后修改日期: 2025年 9月 26日