Tag: do while

在C#中处理“循环初始化”的其他方法

首先,我会说我同意goto语句在很大程度上与现代编程语言中的更高级别结构无关,并且在适当的替代品可用时不应使用。 我最近重新阅读了Steve McConnell的Code Complete原版,并忘记了他对常见编码问题的建议。 几年前,当我第一次开始时,我已经读过它,并且不认为我意识到配方会有多大用处。 编码问题如下:执行循环时,您经常需要执行循环的一部分来初始化状态,然后使用其他逻辑执行循环,并使用相同的初始化逻辑结束每个循环。 一个具体的例子是实现String.Join(delimiter,array)方法。 我想每个人第一个接受这个问题的都是这个。 假设append方法被定义为将参数添加到返回值。 bool isFirst = true; foreach (var element in array) { if (!isFirst) { append(delimiter); } else { isFirst = false; } append(element); } 注意:稍微优化一下就是删除else并将其放在循环的末尾。 赋值通常是单个指令并等效于else,并将基本块的数量减少1并增加主要部分的基本块大小。 结果是在每个循环中执行一个条件以确定是否应该添加分隔符。 我也看到并使用了其他处理这个常见循环问题的方法。 您可以先在循环外执行初始元素代码,然后从第二个元素到结尾执行循环。 您还可以将逻辑更改为始终将元素附加到分隔符,并且一旦完成循环,您只需删除添加的最后一个分隔符。 后一种解决方案往往是我更喜欢的解决方案,因为它不会复制任何代码。 如果初始化序列的逻辑发生变化,您不必记得在两个地方修复它。 然而,它需要额外的“工作”来做某事然后撤消它,至少导致额外的cpu周期,并且在许多情况下,例如我们的String.Join示例也需要额外的内存。 我兴奋地阅读这个结构 var enumerator = array.GetEnumerator(); if (enumerator.MoveNext()) { goto start; do { append(delimiter); start: […]

做..在C#中循环?

如何在C#中编写Do .. While循环? (编辑:我是一名VB.NET程序员,试图转向C#,所以我确实有.NET / VB语法的经验。谢谢!)