只是想知道,如果这被认为是在C#中明确使用goto:这是goto的一个明确使用吗?
IDatabase database = null;
LoadDatabase:
try
{
database = databaseLoader.LoadDatabase();
}
catch(DatabaseLoaderException e)
{
var connector = _userInteractor.GetDatabaseConnector();
if(connector == null)
throw new ConfigException("Could not load the database specified in your config file.");
databaseLoader = DatabaseLoaderFacade.GetDatabaseLoader(connector);
goto LoadDatabase;
}
我觉得这是确定的,因为段小,应该是有意义的。当你想在处理异常之后重试操作时,人们通常可以通过另一种方式从错误中恢复吗?
编辑:这很快。回答一些问题并澄清一些事情 - 这是一个过程的一部分,这个过程本质上是从一个不同类型的项目转变而来。 _userInteractor.GetDatabaseConnector()调用是确定用户是否想要重试的部分(可能使用不同于他们从中加载的配置中的数据库)。如果它返回null,那么没有指定新的数据库连接,操作应该完全失败。
我不知道为什么我没有想到使用while循环。它一定是太接近下午5点。
编辑2:我看了一下LoadDatabase()方法,如果失败,它会抛出DatabaseLoaderException
。我更新了上面的代码来捕获异常,而不是异常。
编辑3:普遍的共识似乎是,
- 使用转到这里是没有必要的 - while循环会做得很好。
- 使用像这样的异常不是一个好主意 - 我不知道用什么来代替它。
没有必要否决一个合理的问题,因为它有它的话跳转。 – 2009-11-19 03:33:05
到OP:转到使用不需要“清除”。它需要“正确”。你的使用很清楚,但是非常不正确。你在这里有很好的答案,听取他们的意见.-) – 2009-11-19 03:44:27
但是,这不男人,这个问题应该downvoted。 – 2009-11-19 03:52:54