Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Utilisez le when mot clé contextuel pour spécifier une condition de filtre dans les contextes suivants :
- Dans une clause catch d’une instruction ou
try-catchd’unetry-catch-finallyinstruction. - En tant que gardien de cas dans l’instruction
switch. - En tant que gardien de cas dans l’expression
switch.
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)
où 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;
}
}
}