Erstellen einer generischen Funktion in C#

Muhammad Maisam Abbas 12 Oktober 2023
  1. Erstellen Sie eine generische Funktion mit Funktionsüberladung in C#
  2. Erstellen Sie eine generische Funktion mit der Klasse T in C#
Erstellen einer generischen Funktion in C#

In diesem Tutorial werden die Methoden zum Erstellen einer Funktion mit einem generischen Rückgabetyp in C# erläutert.

Erstellen Sie eine generische Funktion mit Funktionsüberladung in C#

Wenn wir mit einem Szenario konfrontiert sind, in dem dieselbe Funktion auf verschiedene Datentypen angewendet werden muss, können wir mehrere Lösungen für dieses Problem haben.

Unsere erste Lösung beinhaltet Funktionsüberladung. Dabei erstellen wir mehrere Funktionen mit demselben Namen, aber unterschiedlichen Rückgabetypen und/oder unterschiedlichen Parametern.

Das folgende Code-Snippet zeigt, wie wir mithilfe von Funktionsüberladung in C# eine generische Funktion erreichen können.

class myClass {
  public int div(int a, int b) {
    return a / b;
  }
  public double div(double a, double b) {
    return a / b;
  }

  public static void Main(String[] args) {
    myClass ob = new myClass();

    int result1 = ob.div(12, 2);
    Console.WriteLine(result1);
    double result2 = ob.div(13, 2.5);
    Console.WriteLine(result2);
  }
}

Ausgabe:

6
5.2

Wir haben zwei verschiedene gleichnamige Funktionen definiert, div(), die Integer- und Dezimaldivision in C# handhaben. Ebenso können mehr Funktionen geschrieben werden, um mehr Fälle zu behandeln.

Der Vorteil dieser Methode ist, dass wir nicht mit allen Datentypen dasselbe tun müssen. Wir können mit einem Datentyp das eine und mit dem anderen Datentyp das Gegenteil tun.

Es hängt alles von unserem Szenario und unseren Bedürfnissen ab.

Der klare Nachteil dieses Ansatzes ist, dass wir sehr viel Code schreiben müssen. Dieses Problem wird offensichtlich, wenn wir dasselbe tun, aber alle Datentypen abdecken müssen.

Erstellen Sie eine generische Funktion mit der Klasse T in C#

Dieser Ansatz eignet sich am besten für Szenarien, in denen wir mit allen Datentypen dasselbe tun und viele Fälle behandeln müssen.

Ein Beispiel für diese Art von Aufgabe ist das Lesen von Daten aus einer Datenbank. Hier wissen wir, dass die Datentypen einer Spalte gleich sind, haben aber im Voraus keine Ahnung über den Datentyp oder die Spalte.

In C# ist eine generische Funktion eine Funktion, die mit einem Typparameter T deklariert wird. Dieser Typparameter T wird beim Aufruf der Funktion verwendet, um den Funktionstyp zu definieren.

Wir können jedes Mal dieselbe Funktion mit unterschiedlichen Datentypen als Typparameter aufrufen.

Der folgende Codeausschnitt zeigt, wie wir den Typparameter verwenden können, um eine Funktion mit einem generischen Rückgabetyp in C# zu deklarieren und zu verwenden.

static T changeType<T>(string v) {
  return (T)Convert.ChangeType(v, typeof(T));
}
string s = "92";
int ci = changeType<int>(s);
float cf = changeType<float>(s);
decimal cd = changeType<decimal>(s);
Console.WriteLine(ci);
Console.WriteLine(cf);
Console.WriteLine(cd);

Ausgabe:

92
92
92

Im obigen Code haben wir eine Funktion changeType<T>() mit dem Typparameter T deklariert. Diese Funktion nimmt eine String-Variable v als Eingabeparameter, wandelt den Datentyp des Eingabeparameters v in T um, wandelt das Ergebnis in T um und gibt es zurück.

Die Ausgabe zeigt, was passiert, wenn wir versuchen, den Datentyp der Zeichenfolge 92 in Integer, Float bzw. Dezimal zu ändern.

Das Problem bei diesem Ansatz besteht darin, dass ein Laufzeitfehler auftreten würde, wenn der String nicht in den Typparameter T umgewandelt werden kann.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Verwandter Artikel - Csharp Data Type