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



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

主要方法

public void MainMethod(int id, MyClass model = null)
{
// Logic goes here
}

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

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

他们俩会有相同的表现吗?还是一个比另一个更好?

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

编译器始终在调用站点(调用方法的代码段(应用默认值。这有各种缺点 - 特别是在处理对默认值的更改方面 - 但它确实很容易推理性能等。

我认为使用默认值调用 MainMethod (1( 会更快一些,当我们传递一个 null 参数时,有必要检查它是否是一个再次分配 null 值的参数。

我已经在循环中执行了调用以计算执行时间,结果如下:

TimeSpan stop;
TimeSpan start = new TimeSpan(DateTime.Now.Ticks);
for (int i = 0; i < 10000; i++)
{
MainMethod(1, null);
}

stop = new TimeSpan(DateTime.Now.Ticks);
TimeSpan stop2;
TimeSpan start2 = new TimeSpan(DateTime.Now.Ticks);
for (int i = 0; i < 10000; i++)
{
MainMethod(1);
}
stop2 = new TimeSpan(DateTime.Now.Ticks);
Console.WriteLine(stop.Subtract(start).TotalMilliseconds);
Console.WriteLine(stop2.Subtract(start2).TotalMilliseconds);

public static void MainMethod(int id, MyClass model = null)
{
if (model == null)
{
Console.WriteLine("Is null");
}
else
{
Console.WriteLine("Is Not null");
}
}

结果

调用主方法(1(: 7996,862 ms

调用主方法(1,空(:848,0054 ms

相关内容

  • 没有找到相关文章

最新更新