我正在编写一个应用程序,要求我遍历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可以抛出三个不同的异常,但如果抛出异常,我不希望整个应用程序停止运行,我只想继续下一个成员。
问题是尝试并且捕获在性能上是昂贵的,并且与我在没有尝试和捕获的情况下运行它相比需要花费相当多的时间。
如果没有性能打击,我怎么能这样做?
我的解决方案基于提供的答案:
protected string[] GetRolesForUser(Member member)
{
if(Membership.GetUser(member.LoginName) != null && member.LoginName != "")
return Roles.GetRolesForUser(member.LoginName);
return new string[0];
}
有趣的是,这给了我与原来相似的时间。
答案 0 :(得分:3)
正如我在msdn中看到的,此方法引发了以下异常:
System.ArgumentNullException
System.ArgumentException
System.Configuration.Provider.ProviderException
未启用角色管理时我认为你可以很容易地处理它们:
protected string[] GetGroups(Member member)
{
string login = member.LoginName;
if (login == null || login.Contains(",") || !Roles.Enabled)
return new [] { "" };
return Roles.GetRolesForUser(login);
}