Types d'exceptions levées pour les arguments ou paramètres non valides en C#
-
Lancer
ArgumentException
pour les paramètres non valides ou inattendus enC#
-
Lancer
ArgumentNullException
pour les paramètres non valides ou inattendus dansC#
-
Lancer
ArgumentOutOfRangeException
pour les paramètres non valides ou inattendus dansC#
-
Créer une exception définie par l’utilisateur pour les paramètres non valides ou inattendus en
C#
Les exceptions fournissent des informations sur une erreur d’exécution dans un programme C# ou sur une condition qui ne devrait pas se produire ou viole une contrainte système/application. Dans ce didacticiel, vous apprendrez trois exceptions différentes liées à des arguments ou paramètres non valides et comment les lancer dans un programme C#.
Définir un bloc de code qui lève une exception lorsqu’il intercepte un argument ou un paramètre non valide est le moyen le plus simple de gérer les erreurs inattendues. Un code ou une entrée utilisateur incorrects peuvent provoquer des erreurs, et leur détection nécessite une exception levée par le code d’application C# ou le runtime.
Lancer ArgumentException
pour les paramètres non valides ou inattendus en C#
L’ArgumentException
est levée lorsqu’une méthode reçoit un argument invalide. Il utilise la propriété ArgumentException.GetType().Name
pour afficher le nom de l’objet d’exception.
À l’aide de la propriété Message
, vous pouvez afficher le texte du message d’exception, qui contient la raison de son apparition. Il est important que chaque fois que vous lancez des exceptions en C#, la propriété Message
de cette exception doit contenir un message significatif pour décrire l’argument non valide et la plage de valeurs attendue de l’argument.
Les classes ArgumentNullException
et ArgumentOutOfRangeException
sont les classes dérivées de la classe ArgumentException
. La classe ArgumentException
elle-même hérite de la classe System.SystemException
.
En général, System.Exception
est une classe de base de chaque exception levée pour les arguments ou paramètres non valides en C#.
using System;
namespace ArgumentExceptionExp {
class UserEnrollment {
static void Main(string[] args) {
Console.WriteLine("Please enter your first name and last name for enrollment.");
Console.WriteLine("First Name: ");
var userFirstN = Console.ReadLine();
Console.WriteLine("Last Name: ");
var userLastN = Console.ReadLine();
try {
var userFullN = ShowFullUserName(userFirstN, userLastN);
Console.WriteLine($"Congratulations, {userFullN}!");
} catch (ArgumentException ex) {
Console.WriteLine("Something went wrong, please try again!");
Console.WriteLine(ex);
}
}
static string ShowFullUserName(string userFirstN, string userLastN) {
if (userFirstN == "" || userLastN == "")
throw new ArgumentException(
"Attention, please! Your first or last user name cannot be empty.");
return $"{userFirstN} {userLastN}";
}
}
}
Production:
Please enter your first name and last name for enrollment.
First Name:
Last Name:
Kazmi
Something went wrong, please try again!
System.ArgumentException: Attention, please! Your first or last user name cannot be empty.
at ArgumentExceptionExp.UserEnrollment.ShowFullUserName (System.String userFirstN, System.String userLastN) [0x00020] in <8fb4997067094d929e0f81a3893882f9>:0
at ArgumentExceptionExp.UserEnrollment.Main (System.String[] args) [0x0002f] in <8fb4997067094d929e0f81a3893882f9>:0
Dans ce cas, ArgumentException
sera levée uniquement lorsqu’une activité inattendue ou invalide empêche une méthode de terminer sa fonction normale. C’est une bonne pratique de programmation d’ajouter des informations à une exception qui est relancée pour fournir plus d’informations lors du débogage.
On peut lancer une exception en utilisant le mot-clé throw
suivi d’une nouvelle instance dérivée de la classe System.Exception
. Le framework .NET
fournit de nombreux types d’exception standard prédéfinis que vous pouvez utiliser pour gérer les arguments et les paramètres non valides.
Lancer ArgumentNullException
pour les paramètres non valides ou inattendus dans C#
Lorsqu’une méthode dans le programme C# reçoit une référence nulle qui ne l’accepte pas comme argument valide, ArgumentNullException
doit être levée pour comprendre l’erreur. Il est lancé au moment de l’exécution lorsqu’un objet non instancié est passé à une méthode pour éviter l’erreur.
De plus, il est levé lorsqu’un objet renvoyé par un appel de méthode est passé en argument à une deuxième méthode, mais que la valeur de l’objet renvoyé d’origine est null
.
Son comportement est identique à ArgumentException
; cependant, il utilise le HRESULT E_POINTER
, qui a la valeur 0x80004003
.
using System;
namespace TryCatchArgNullExcep {
class ArgNullExpProgram {
static void Main(string[] args) {
try {
var ArgNullEVariable = new ArgNullMember(null, 32);
} catch (ArgumentNullException ex) {
Console.WriteLine("Sorry for the inconvenience, something went wrong...");
Console.WriteLine(ex);
}
}
class ArgNullMember {
public ArgNullMember(string memberName, int memberAge) {
if (memberName == null)
throw new ArgumentNullException(
nameof(memberName), "The member name cannot be `null` or empty. Please, try again!");
MemberName = memberName;
MemberAge = memberAge;
}
public string MemberName { get; private set; }
public int MemberAge { get; private set; }
}
}
}
Production:
Sorry for the inconvenience, something went wrong...
System.ArgumentNullException: The member name cannot be `null` or empty. Please, try again!
Parameter name: memberName
at TryCatchArgNullExcep.ArgNullExpProgram+ArgNullMember..ctor (System.String memberName, System.Int32 memberAge) [0x00010] in <1001b7741efd42ec97508d09c5fc60a2>:0
at TryCatchArgNullExcep.ArgNullExpProgram.Main (System.String[] args) [0x00002] in <1001b7741efd42ec97508d09c5fc60a2>:0
Lancer ArgumentOutOfRangeException
pour les paramètres non valides ou inattendus dans C#
Cette exception est levée lorsque la valeur d’un argument est en dehors de la plage de valeurs autorisée définie par la méthode appelée en C#. En général, une ArgumentOutOfRangeException
résulte de l’erreur du développeur.
Au lieu de le gérer dans un bloc try/catch
, vous devez éliminer la cause de l’exception ou valider les arguments avant de les passer à la méthode.
Les classes l’utilisent largement dans les espaces de noms System.Collections
et System.IO
, la classe de tableau et les méthodes de manipulation de chaînes dans la classe String
. Il est lancé par le CLR ou une autre bibliothèque de classes en C# et indique une erreur du développeur.
using System;
namespace ArgumentOutOfRangeExceptionExp {
class userInfo {
static void Main(string[] args) {
try {
Console.WriteLine("Enter User Name: ");
string Hassan = Console.ReadLine();
Console.WriteLine("Enter your Age: ");
int ageU = Int32.Parse(Console.ReadLine());
var user = new userInfoProcess(Hassan, ageU);
} catch (ArgumentOutOfRangeException ex) {
Console.WriteLine("Please be patient, something went wrong.");
Console.WriteLine(ex);
}
}
}
class userInfoProcess {
public userInfoProcess(string userName, int userAge) {
if (userName == null) {
throw new ArgumentOutOfRangeException(nameof(userName),
"Your username is invalid, please try again!");
} else if (userName == "") {
throw new ArgumentOutOfRangeException(nameof(userName),
"Your username is invalid, please try again!");
}
if (userAge < 18 || userAge > 50)
throw new ArgumentOutOfRangeException(
nameof(userAge), "Your age is outside the allowable range, please enter a valid user.");
ArgNullUName = userName;
ArgNullUAge = userAge;
}
public string ArgNullUName { get; private set; }
public int ArgNullUAge { get; private set; }
}
}
Production:
Enter User Name:
Hassan
Enter your Age:
11
Please be patient, something went wrong.
System.ArgumentOutOfRangeException: Your age is outside the allowable range, please enter a valid user.
Parameter name: userAge
at ArgumentOutOfRangeExceptionExp.userInfoProcess..ctor (System.String userName, System.Int32 userAge) [0x00052] in <b199b92ace93448f8cc4c37cc4d5df33>:0
at ArgumentOutOfRangeExceptionExp.userInfo.Main (System.String[] args) [0x00029] in <b199b92ace93448f8cc4c37cc4d5df33>:0
Créer une exception définie par l’utilisateur pour les paramètres non valides ou inattendus en C#
Vous pouvez également définir vos exceptions pour les arguments ou paramètres non valides en C#. Les classes d’exception définies par l’utilisateur sont dérivées de la classe Exception
.
La gestion des exceptions en C#, prise en charge par les blocs try/catch
et finally
, est un mécanisme permettant de détecter et de gérer les erreurs d’exécution du code.
using System;
namespace UserDefinedExceptionExp {
class ExceptionHandlingC {
static void Main(string[] args) {
string Name = "Hassan";
int Age = 18;
Check temp = new Check();
try {
temp.checkTemp(Name, Age);
} catch (InvalidNameException e) {
Console.WriteLine("InvalidNameException: {0}", e.Message);
}
Console.ReadKey();
}
}
}
public class InvalidNameException : Exception {
public InvalidNameException(string message) : base(message) {}
}
public class Check {
public void checkTemp(string name, int age) {
// this exception will be thrown if the user name will be `Hassan`
if (name == "Hassan") {
throw(new InvalidNameException("User is not valid."));
} else {
Console.WriteLine("You are successfully signed in with the name: {0}", name);
}
}
}
Production:
InvalidNameException: User is not valid.
Dans ce didacticiel, vous avez appris trois types d’exception couramment rencontrés pour les arguments et paramètres non valides et comment créer des exceptions définies par l’utilisateur en C#.
L’astuce consiste à utiliser et à lancer la bonne exception qui fournit des détails sur ce qui s’est mal passé, pourquoi c’est mal et comment le réparer dans un programme C#.
Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.
GitHub