我刚刚开始了一个职位,在工作日结束时,我通过慢慢阅读我们的代码库来等待流量.我偶然发现了这一点,即使在白板上花了相当多的时间,我仍然无法想到一种提取方法goto
.有没有办法消除这种跳跃?
public void MyUpdate(MyType foo) { /*Prep code for the loops*/ foreach (Thing bar in something) { foreach (Collection item in bar.Stuff) { Data dataRX = item.First; if (dataRX != null && dataRX.ID.Equals(globalNonsense.ID)) { // Update Data with the latest changes dataRX.fooBuddy = foo; goto exitLoops; } } } exitLoops: ; }
Yacoub Massa.. 6
由于标签exitLoops
位于方法的末尾,因此您只需使用return
退出方法,如下所示:
if (dataRX != null && dataRX.ID.Equals(globalNonsense.ID)) { // Update Data with the latest changes dataRX.fooBuddy = foo; return; }
另一种方法是使用这样的标志:
bool done = false; foreach (Thing bar in something) { foreach (Collection item in bar.Stuff) { Data dataRX = item.First; if (dataRX != null && dataRX.ID.Equals(globalNonsense.ID)) { // Update Data with the latest changes dataRX.fooBuddy = foo; done = true; break; } } if(done) break; }
即使标签后面有一些代码,您也可以使用第二种方法.
由于标签exitLoops
位于方法的末尾,因此您只需使用return
退出方法,如下所示:
if (dataRX != null && dataRX.ID.Equals(globalNonsense.ID)) { // Update Data with the latest changes dataRX.fooBuddy = foo; return; }
另一种方法是使用这样的标志:
bool done = false; foreach (Thing bar in something) { foreach (Collection item in bar.Stuff) { Data dataRX = item.First; if (dataRX != null && dataRX.ID.Equals(globalNonsense.ID)) { // Update Data with the latest changes dataRX.fooBuddy = foo; done = true; break; } } if(done) break; }
即使标签后面有一些代码,您也可以使用第二种方法.