只有在做项目的过程中才能发现自己的不足从而加以弥补
有如下一段代码(做了一些省略)
private void SaveCoilsConfigInPlc(object parameter)
{
// CoilsByDb 和 Coils 是集合
CoilsByDb.Foreach(coilByDb => {
Coils.Foreach(c => {
var tempAddr = .....;//一系列运算
if (tempAddr == null)//语句1
{
ShowAlertDialog("不符合规范。");//语句2
return;//语句3
}
});
});
}
当满足语句1的情况下就是执行语句2并且执行语句3 直接return返回跳出SaveCoilsConfigInPlc(object parameter)方法,这是我当时做项目时的思维,结果显然和预期的不一样,并不会跳出方法,而是继续执行foreach循环,但是当我使用以下常规foreach循环时return却可以直接跳出SaveCoilsConfigInPlc方法,这是为什么呢?
private void SaveCoilsConfigInPlc(object parameter)
{
foreach (var coilByDb in CoilsByDb)
{
foreach (var c in Coils)
{
var tempAddr = .....;//一系列运算
if (tempAddr == null)//语句1
{
ShowAlertDialog("不符合规范。");//语句2
return;//语句3
}
}
}
}
}
原因:CoilsByDb.ForEach 和 Coils.Foreach的参数是一个 委托 ,所以传入的是一个方法,此方法内的return语句只是退出此方法。而不会跳出整个循环。就像正常调用一个方法一样,那个方法的退出,不会影响这个for循环。
而像 foreach (var coilByDb in CoilsByDb) 这种的return则直接跳出了当前的Main函数,所以两种写法导致不同的结果。