我正在编写一个应用程序,它要求我遍历 ASP.NET 网站中的成员/用户列表。我正在调用一个可以抛出我无法控制的异常的方法。
这是一个片段:
foreach(var member in members)
{
memberExport.Groups = GetGroups(member);
}
这是GetGroups
protected string[] GetGroups(Member member)
{
try
{
return Roles.GetRolesForUser(member.LoginName);
}
catch(Exception ex)
{
return new string[] { "" };
}
}
Roles.GetRolesForUser 可以抛出三个不同的异常,但如果抛出异常,我不希望整个应用程序停止运行,我只想继续下一个成员。
问题是try and catch在性能上很昂贵,并且与我在没有 try and catch 的情况下运行它相比要花费相当多的时间。
如何在不影响性能的情况下做到这一点?
我的解决方案基于提供的答案:
protected string[] GetRolesForUser(Member member)
{
if(Membership.GetUser(member.LoginName) != null && member.LoginName != "")
return Roles.GetRolesForUser(member.LoginName);
return new string[0];
}
有趣的是,这给了我与最初相似的时间。