我正在尝试通过简单登录从Active Directory基础创建对象。问题是某些登录信息是有效的。
我怎样才能使用try-catch,以便在抛出异常时跳转到下一次登录?
以下是代码:
foreach (var PharosUserItem in ListRef)
{
ADUser User;
try
{
User = new ADUser(PharosUserItem.UserLoginPharos);
}
catch (ByTel.DirectoryServices.Exceptions.UserNotFoundException ex)
{
break;
}
}
休息让我离开foreach
,这不是我想要的。有什么想法吗?
答案 0 :(得分:30)
您正在寻找继续
foreach (var PharosUserItem in ListRef)
{
ADUser User;
try
{
User = new ADUser(PharosUserItem.UserLoginPharos);
}
catch (ByTel.DirectoryServices.Exceptions.UserNotFoundException ex)
{
continue;
}
}
答案 1 :(得分:13)
改为使用continue
语句:
foreach (var pharosUserItem in ListRef)
{
ADUser user;
try
{
user = new ADUser(pharosUserItem.UserLoginPharos);
}
catch (UserNotFoundException)
{
continue;
}
// Use "user" here
}
(我在变量大小写方面做了一些改动,避免使用大量长的完全限定名称作为异常,并为异常提供一个变量,然后忽略它。)
请注意,如果有任何合理的方法可以获得有效用户列表并进行检查,那么就像在此处使用流控制的例外一样。这可能不太可行,但值得检查:)
答案 2 :(得分:5)
您必须使用continue;
答案 3 :(得分:5)
使用continue
语句跳到下一次迭代。
答案 4 :(得分:1)
而不是抛出异常,而不是先尝试检查用户是否有效。抛出异常是非常昂贵的,并且实际上应该仅用于“特殊”情况而不是控制应用程序的逻辑流程,这不是他们应该使用的,因为您期望某些用户失败。
答案 5 :(得分:0)
为什么不使用任何东西而不是继续?
改为使用continue语句:
foreach (var pharosUserItem in ListRef)
{
ADUser user;
try
{
user = new ADUser(pharosUserItem.UserLoginPharos);
}
catch (UserNotFoundException)
{
}
// Use "user" here
}
或者放一个
console.writeline("user not found: "+ pharosuseritem.tostring() );