将null传递给默认值为null的可选参数

Akb*_*sha 1 c# null optional-parameters

我有一个方法具有默认值的一个可选null。我观察到,那些使用该方法的人将其null作为可选参数的值传递

主要方法

public void MainMethod(int id, MyClass model = null)
{
  // Logic goes here
}
Run Code Online (Sandbox Code Playgroud)

我可以看到两种类型的调用,

public void First()
{
  MainMethod(1, null);
}

public void Second()
{
  MainMethod(1);
}
Run Code Online (Sandbox Code Playgroud)

他们两个的表现会不会一样?还是一个比另一个更好?

Jon*_*eet 7

它们都将导致完全相同的IL。在中Second,编译器只是自动为您提供参数。

默认值始终由编译器在调用站点(调用该方法的代码段)中应用。这有很多弊端-特别是在处理对默认值的更改方面-但这确实使推理性能等变得容易。