Arten von Ausnahmen, die für ungültige Argumente oder Parameter in C# ausgelöst werden

Syed Hassan Sabeeh Kazmi 12 Oktober 2023
  1. Werfen Sie ArgumentException für ungültige oder unerwartete Parameter in C#
  2. Werfen Sie ArgumentNullException für ungültige oder unerwartete Parameter in C#
  3. Werfen Sie ArgumentOutOfRangeException für ungültige oder unerwartete Parameter in C#
  4. Erstellen Sie eine benutzerdefinierte Ausnahme für ungültige oder unerwartete Parameter in C#
Arten von Ausnahmen, die für ungültige Argumente oder Parameter in C# ausgelöst werden

Ausnahmen liefern Informationen über einen Laufzeitfehler in einem C#-Programm oder eine Bedingung, die nicht erwartet wird oder gegen eine System-/Anwendungseinschränkung verstößt. In diesem Tutorial lernen Sie drei verschiedene Ausnahmen im Zusammenhang mit ungültigen Argumenten oder Parametern kennen und erfahren, wie Sie sie in einem C#-Programm auslösen.

Das Definieren eines Codeblocks, der eine Ausnahme auslöst, wenn er ein ungültiges Argument oder einen ungültigen Parameter abfängt, ist die einfachste Möglichkeit, unerwartete Fehler zu behandeln. Schlechter Code oder Benutzereingaben können Fehler verursachen, und ihre Erkennung erfordert eine Ausnahme, die vom C#-Anwendungscode oder der Laufzeit ausgelöst wird.

Werfen Sie ArgumentException für ungültige oder unerwartete Parameter in C#

Die ArgumentException wird geworfen, wenn eine Methode ein ungültiges Argument erhält. Es verwendet die Eigenschaft ArgumentException.GetType().Name, um den Namen des Ausnahmeobjekts anzuzeigen.

Mit der Eigenschaft Message können Sie sich den Text der Ausnahmemeldung anzeigen lassen, der den Grund für das Auftreten enthält. Es ist wichtig, dass beim Auslösen von Ausnahmen in C# die Eigenschaft Message dieser Ausnahme eine aussagekräftige Nachricht enthalten muss, um das ungültige Argument und den erwarteten Wertebereich des Arguments zu beschreiben.

Die ArgumentNullException und ArgumentOutOfRangeException sind die abgeleiteten Klassen der ArgumentException-Klasse. Die Klasse ArgumentException selbst erbt von der Klasse System.SystemException.

Im Allgemeinen ist System.Exception eine Basisklasse jeder Ausnahme, die für ungültige Argumente oder Parameter in C# ausgelöst wird.

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}";
    }
  }
}

Ausgabe:

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

In diesem Fall wird die ArgumentException nur geworfen, wenn eine unerwartete oder ungültige Aktivität verhindert, dass eine Methode ihre normale Funktion erfüllt. Es ist eine gute Programmierpraxis, Informationen zu einer Ausnahme hinzuzufügen, die erneut ausgelöst wird, um beim Debuggen weitere Informationen bereitzustellen.

Wir können eine Ausnahme mit dem Schlüsselwort throw auslösen, gefolgt von einer neuen Instanz, die von der Klasse System.Exception abgeleitet ist. Das .NET-Framework bietet viele standardmäßig vordefinierte Ausnahmetypen, die Sie verwenden können, um ungültige Argumente und Parameter zu behandeln.

Werfen Sie ArgumentNullException für ungültige oder unerwartete Parameter in C#

Wenn eine Methode im C#-Programm eine Nullreferenz empfängt, die sie nicht als gültiges Argument akzeptiert, muss ArgumentNullException ausgelöst werden, um den Fehler zu verstehen. Es wird zur Laufzeit ausgelöst, wenn ein nicht instanziiertes Objekt an eine Methode übergeben wird, um den Fehler zu verhindern.

Außerdem wird es ausgelöst, wenn ein von einem Methodenaufruf zurückgegebenes Objekt als Argument an eine zweite Methode übergeben wird, der Wert des ursprünglich zurückgegebenen Objekts jedoch null ist.

Sein Verhalten ist identisch mit der ArgumentException; es verwendet jedoch den HRESULT E_POINTER, der den Wert 0x80004003 hat.

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; }
    }
  }
}

Ausgabe:

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

Werfen Sie ArgumentOutOfRangeException für ungültige oder unerwartete Parameter in C#

Diese Ausnahme wird ausgelöst, wenn der Wert eines Arguments außerhalb des zulässigen Wertebereichs liegt, der von der aufgerufenen Methode in C# definiert wird. In der Regel resultiert aus dem Entwicklerfehler eine ArgumentOutOfRangeException.

Anstatt es in einem try/catch-Block zu behandeln, sollten Sie die Ursache der Ausnahme beseitigen oder Argumente validieren, bevor Sie sie an die Methode übergeben.

Klassen verwenden es ausgiebig in den Namespaces System.Collections und System.IO, in der Array-Klasse und in Methoden zur String-Manipulation in der Klasse String. Es wird von der CLR oder einer anderen Klassenbibliothek in C# ausgelöst und weist auf einen Entwicklerfehler hin.

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; }
  }
}

Ausgabe:

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

Erstellen Sie eine benutzerdefinierte Ausnahme für ungültige oder unerwartete Parameter in C#

Sie können Ihre Ausnahmen auch für ungültige Argumente oder Parameter in C# definieren. Benutzerdefinierte Ausnahmeklassen werden von der Klasse Exception abgeleitet.

Die Ausnahmebehandlung in C#, die von den Blocks try/catch und finally unterstützt wird, ist ein Mechanismus zum Erkennen und Behandeln von Codelaufzeitfehlern.

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);
    }
  }
}

Ausgabe:

InvalidNameException: User is not valid.

In diesem Tutorial haben Sie drei häufig anzutreffende Ausnahmetypen für ungültige Argumente und Parameter kennengelernt und erfahren, wie Sie die benutzerdefinierten Ausnahmen in C# erstellen.

Der Trick besteht darin, die richtige Ausnahme zu verwenden und auszulösen, die Details darüber liefert, was schief gelaufen ist, warum es schief gelaufen ist und wie es in einem C#-Programm behoben werden kann.

Syed Hassan Sabeeh Kazmi avatar Syed Hassan Sabeeh Kazmi avatar

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

Verwandter Artikel - Csharp Exception