【发布时间】:2011-02-02 07:01:22
【问题描述】:
我刚刚在 .NET 基础库的反射器中找到了这段代码...
if (this._PasswordStrengthRegularExpression != null)
{
this._PasswordStrengthRegularExpression = this._PasswordStrengthRegularExpression.Trim();
if (this._PasswordStrengthRegularExpression.Length == 0)
{
goto Label_016C;
}
try
{
new Regex(this._PasswordStrengthRegularExpression);
goto Label_016C;
}
catch (ArgumentException exception)
{
throw new ProviderException(exception.Message, exception);
}
}
this._PasswordStrengthRegularExpression = string.Empty;
Label_016C:
... //Other stuff
我已经听过所有“你不应该使用 goto,因为害怕永远流放地狱”的说法。我一直非常重视 MS 编码员,虽然我可能不同意他们的所有决定,但我始终尊重他们的推理。
那么 - 我缺少这样的代码是否有充分的理由?这段代码摘录是由一个无能的开发人员拼凑而成的吗?还是 .NET 反射器返回的代码不准确?
我希望有一个很好的理由,而我只是盲目地想念它。
感谢大家的意见
【问题讨论】:
-
我猜你是通过 Reflector 找到的。这不一定是他们编写的实际代码。
-
我可以说,无论高低评价“微软程序员”都不是一个好主意。一家公司太大、太多样化,无法对其技能水平进行粗略分析。如果没有公平份额的坏苹果,你就无法经营这么大的组织,如果没有雇佣几个好人,你就无法拥有那么多钱。
-
@Daniel Ballinger - 如果您在短时间内发现它是会员提供商的一部分,那么您应该花 3 分钟的时间来弄清楚是哪一个 ;)
-
有,有些人只是害怕给出例子,因为害怕被否决。 goto 应该只用于向前跳跃(这里是一个例子:stackoverflow.com/questions/863172/…),向后跳跃已经由循环提供,另一个很好的例子是 Donald Knuth 的素数生成器,我在我的 C 书中读到它(被借了,忘记归还),代码很优雅,我似乎无法在网络中找到它。
-
我认为所有
GOTO语句都应该与描述性标签配对...例如OVER_THERE、HELL、JAIL和BED