0

我正在编写一个应用程序,它要求我遍历 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];
}

有趣的是,这给了我与最初相似的时间。

4

1 回答 1

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);    
}
于 2013-04-03T10:16:19.183 回答