如以上代码所示,在 for 循环里面,通过在条件语句里面的 i < foo.GetCount() 判断是否超过了 Foo 数量范围,从而完成循环条件判断
以上代码的 _ = value; 只是用于示例表示取出了 value 值,模拟拿出去用。这里的 _ = 表示的是右值不受关注,不受使用,只是一个让编译器开森的代码,让编译器不要警告说 value 局部变量没地方使用而已
由于 Foo 的 GetCount 方法是耗时的,以上代码将会在每次循环判断条件语句里面调用 GetCount 方法。无疑这将会是低服从的
咱又提前知道了 GetCount 方法的返回值不会在循环过程中变更,一个比较好的方法就是提前先取出 GetCount 方法的返回值,将返回值存放到局部变量里面,如此即可减少此方法的调用
var fooCount = foo.GetCount();
for (int i = 0; i < fooCount; i++)
{
var value = foo[i];
_ = value;
}
复制代码
如上述代码所示,可以看到在 for 分支判断语句里面只使用 i < fooCount 判断逻辑,不再必要每次判断时都调用 GetCount 方法,可以提拔不少的性能
然而以上代码却多引入了一行 var fooCount = foo.GetCount(); 代码,代码行数上比不过最初的代码。在不关注耗时或性能的代码上,这样看起来最初的循环代码会比上述代码更加简短
如果只是为了减少代码行,那可以将 var fooCount = foo.GetCount(); 放入到 for 循环的初始化表达式语句里面编写,如下面代码
for (int i = 0, count = foo.GetCount(); i < count; i++)
{
var value = foo[i];
_ = value;
}
复制代码
以上的 for 循环语句的初始化表达式的代码就是 int i = 0, count = foo.GetCount() 同时初始化 i 和 count 两个局部变量
尽管以上两个代码看起来行数不雷同,但从底层上没有差别
以上例子只是告诉大家不要有编程的习惯,误以为 for 循环的初始化语句只能初始化循环的索引局部变量。其实在 for 循环的初始化语句里面可以放入你开森的逻辑
本文以上代码放在 github 和 gitee 上,可以使用如下命令行拉取代码。我整个代码仓库比较庞大,使用以下命令行可以进行部分拉取,拉取速度比较快
先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码