Partager via


quand (référence C#)

Utilisez le when mot clé contextuel pour spécifier une condition de filtre dans les contextes suivants :

La documentation de référence du langage C# décrit la version la plus récente du langage C#. Il contient également la documentation initiale des fonctionnalités dans les préversions publiques pour la prochaine version du langage.

La documentation identifie toute fonctionnalité introduite en premier dans les trois dernières versions de la langue ou dans les préversions publiques actuelles.

Conseil / Astuce

Pour savoir quand une fonctionnalité a été introduite en C#, consultez l’article sur l’historique des versions du langage C#.

when dans une clause catch

Utilisez le when mot clé dans une clause catch pour spécifier une condition qui doit être vraie pour le gestionnaire pour qu’une exception spécifique s’exécute. Sa syntaxe est la suivante :

catch (ExceptionType [e]) when (expr)

expr est une expression qui prend la valeur booléenne. Si elle retourne true, le gestionnaire d’exceptions s’exécute ; si false, il ne le fait pas.

Les filtres d’exceptions avec le when mot clé offrent plusieurs avantages par rapport aux approches traditionnelles de gestion des exceptions, notamment une meilleure prise en charge du débogage et des avantages en matière de performances. Pour obtenir une explication détaillée de la façon dont les filtres d’exceptions conservent la pile des appels et améliorent le débogage, consultez Les filtres d’exceptions par rapport à la gestion traditionnelle des exceptions.

L’exemple suivant utilise le when mot clé pour exécuter conditionnellement des gestionnaires pour un HttpRequestException texte du message d’exception.

using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        Console.WriteLine(MakeRequest().Result);
    }

    public static async Task<string> MakeRequest()
    {
        var client = new HttpClient();
        var streamTask = client.GetStringAsync("https://localHost:10000");
        try
        {
            var responseText = await streamTask;
            return responseText;
        }
        catch (HttpRequestException e) when (e.Message.Contains("301"))
        {
            return "Site Moved";
        }
        catch (HttpRequestException e) when (e.Message.Contains("404"))
        {
            return "Page Not Found";
        }
        catch (HttpRequestException e)
        {
            return e.Message;
        }
    }
}

Voir aussi