我有一个方法,它有一个默认值为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