Menu
Coddy logo textTech

Das 'params'-Schlüsselwort

Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy — Lektion 47 von 70.

Das Schlüsselwort params ermöglicht es einer Methode, eine variable Anzahl von Argumenten desselben Typs zu akzeptieren. Anstatt von den Aufrufern zu verlangen, manuell ein Array zu erstellen, können sie Argumente direkt übergeben, getrennt durch Kommas.

Platzieren Sie params vor einem Array-Parameter in der Methodensignatur:

public static int Sum(params int[] numbers)
{
    int total = 0;
    foreach (int n in numbers)
        total += n;
    return total;
}

// Alle diese Aufrufe funktionieren
Console.WriteLine(Sum(1, 2));           // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5));  // 15
Console.WriteLine(Sum());               // 0 (leeres Array)

Der Compiler packt die Argumente automatisch in ein Array. Sie können auch direkt ein bestehendes Array übergeben, wenn Sie bereits eines haben:

int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values));  // 60

Es gibt ein paar Regeln zu beachten: Eine Methode kann nur einen params-Parameter haben, und dieser muss der letzte Parameter in der Liste sein. Sie können ihn mit regulären Parametern kombinieren:

public static void Log(string prefix, params object[] items)
{
    foreach (var item in items)
        Console.WriteLine(prefix + item);
}

Log("Item: ", "Apple", 42, true);

Das Schlüsselwort params macht APIs flexibler und benutzerfreundlicher, weshalb man es in Methoden wie Console.WriteLine und string.Format findet.

challenge icon

Aufgabe

Einfach

Lassen Sie uns einen flexiblen Nachrichten-Formatierer erstellen, der das Schlüsselwort params verwendet, um eine beliebige Anzahl von Werten zu verarbeiten. Sie werden eine Hilfsklasse erstellen, die Nachrichten mit variablen Argumenten formatieren kann, und so demonstrieren, wie params Methoden vielseitiger und benutzerfreundlicher macht.

Sie werden Ihren Code in zwei Dateien organisieren:

  • MessageFormatter.cs: Erstellen Sie eine Klasse MessageFormatter im Namespace Formatting mit zwei Methoden, die params verwenden:
    • Combine(params string[] parts) - verbindet alle bereitgestellten Zeichenfolgen mit einem Leerzeichen dazwischen und gibt das Ergebnis zurück.
    • FormatList(string label, params int[] numbers) - kombiniert einen regulären Parameter mit einem params-Array. Sie sollte das Label gefolgt von einem Doppelpunkt und dann alle durch Kommas getrennten Zahlen zurückgeben (z. B. Scores: 85, 90, 78).
  • Program.cs: Demonstrieren Sie in Ihrer Hauptdatei beide Methoden mit Eingaben. Lesen Sie einen Label-String ein und lesen Sie dann eine Zeile mit durch Kommas getrennten Ganzzahlen. Verwenden Sie Combine, um drei feste Wörter zu verbinden, und verwenden Sie FormatList, um das Label mit den Zahlen anzuzeigen.

Sie erhalten zwei Eingaben:

  • Einen Label-String (z. B. Scores)
  • Eine durch Kommas getrennte Liste von Ganzzahlen (z. B. 85,90,78,92)

Rufen Sie zuerst Combine mit den Wörtern "Hello", "params" und "world!" auf und geben Sie das Ergebnis aus. Analysieren (parsen) Sie dann die durch Kommas getrennten Ganzzahlen in ein Array und rufen Sie FormatList mit dem Label und dem Ganzzahl-Array auf, und geben Sie auch dieses Ergebnis aus.

Wenn die Eingaben beispielsweise Scores und 85,90,78 sind, sollte die Ausgabe wie folgt aussehen:

Hello params world!
Scores: 85, 90, 78

Beachten Sie, wie Combine eine beliebige Anzahl von Zeichenfolgen direkt akzeptiert, während FormatList zeigt, dass man reguläre Parameter mit params mischen kann – der params-Parameter muss lediglich an letzter Stelle stehen. Sie können auch ein vorhandenes Array an eine params-Methode übergeben, was genau das ist, was Sie mit den geparsten Ganzzahlen tun werden!

Spickzettel

Das Schlüsselwort params ermöglicht es einer Methode, eine variable Anzahl von Argumenten desselben Typs zu akzeptieren, ohne dass der Aufrufer manuell ein Array erstellen muss:

public static int Sum(params int[] numbers)
{
    int total = 0;
    foreach (int n in numbers)
        total += n;
    return total;
}

// Alle diese Aufrufe funktionieren
Console.WriteLine(Sum(1, 2));           // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5));  // 15
Console.WriteLine(Sum());               // 0 (leeres Array)

Sie können ein bestehendes Array direkt an eine params-Methode übergeben:

int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values));  // 60

Regeln für params:

  • Eine Methode kann nur einen params-Parameter haben
  • Er muss der letzte Parameter in der Liste sein
  • Kann mit regulären Parametern kombiniert werden
public static void Log(string prefix, params object[] items)
{
    foreach (var item in items)
        Console.WriteLine(prefix + item);
}

Log("Item: ", "Apple", 42, true);

Probier es selbst

using System;
using Formatting;

class Program
{
    public static void Main(string[] args)
    {
        // Eingaben lesen
        string label = Console.ReadLine();
        string numbersInput = Console.ReadLine();
        
        // TODO: Verwende MessageFormatter.Combine mit "Hello", "params" und "world!"
        // und gib das Ergebnis aus
        
        
        // TODO: Parse die durch Kommas getrennten Ganzzahlen in ein int-Array
        // Hinweis: Teile den String auf und konvertiere jeden Teil in ein int
        
        
        // TODO: Verwende MessageFormatter.FormatList mit dem label und dem int-Array
        // und gib das Ergebnis aus
        
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung