out-Parameter gibt es in C# schon ewig, die Handhabe war bisher jedoch immer etwas klobig. Mit C# 7 wurden einige Änderungen vorgenommen, die eine einfachere Verwendung ermöglichen.

Wenn du nicht so firm mit out-Parametern bist, dann möchte ich dir eine kurze Zusammenfassung im Vorfeld geben:

  • out Paramter veranlassen ein Argument als Referenz übergeben zu werden
  • out Parameter sowohl in der Methodensignatur als auch bei der Übergabe mit dem out Schlüsselwort gekennzeichnet werden
  • Eine Instanzierung vor der Verwendung ist nicht notwendig, der Variable muss jedoch innerhalb der Methode mit einem Wert versehen werden

Wann werden out Parameter verwendet?

  • Typischerweise werden sie für das Try-Pattern verwendet, siehe z.B. Int32.TryParse. Dadurch kann man sich darauf verlassen, dass im Falle eines Durchlaufs ein Wert gesetzt wird. Bei anderen Implementierung sollte der Wert dennoch geprüft werden, da auch eine Initialisierung auf null zulässig ist.
  • Beispielsweise wird out auch gerne verwendet, wenn zu einem Rückgabewert zusätzlich noch ein Status o.Ä. zurückgeliefert wird.

Zu erwähnen ist, dass aber selbst Microsoft die Verrwendung von out-Parametern nicht empfiehlt: Avoid out parameters.

Nun aber zu den Neuerungen:

// out parameter
// old
int parsedVal;
if (Int32.TryParse("32", out parsedVal))
{
// logic
}

// new
if (Int32.TryParse("42", out int intVal))
{
// logic
}

Console.WriteLine($"{intVal}");

Wie im Code ersichtlich, kann die out-Variable nun an der Stelle deklariert werden, an der sie auch tatsächlich zum Einsatz kommt. Der Gültigkeitsbereich hat sich dadurch nicht verändert.

Auch var kann verwendet werden, da der Typ an dieser Stelle vom Compiler festgestellt werden kann:

if (Int32.TryParse("42", out var intVal))
{
// logic
}

Console.WriteLine($"{intVal}");

Durch Verwendung von _ können out-Werte auch verworfen werden:

var size = new Size(10, 10);
size.GetHeightAndWidth(out int width, out _);

In diesem Fall wird width übernommen, der zweite Parameter jedoch nicht.

Das war es auch schon. Viel Spaß beim Experimentieren und Verwenden.

Veröffentlicht von Norbert Eder

Ich bin ein leidenschaftlicher Softwareentwickler. Mein Wissen und meine Gedanken teile ich nicht nur hier im Blog, sondern auch in Fachartikeln und Büchern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Cookie-Einstellungen
Auf dieser Website werden Cookie verwendet. Diese werden für den Betrieb der Website benötigt oder helfen uns dabei, die Website zu verbessern.
Alle Cookies zulassen
Auswahl speichern
Individuelle Einstellungen
Individuelle Einstellungen
Dies ist eine Übersicht aller Cookies, die auf der Website verwendet werden. Sie haben die Möglichkeit, individuelle Cookie-Einstellungen vorzunehmen. Geben Sie einzelnen Cookies oder ganzen Gruppen Ihre Einwilligung. Essentielle Cookies lassen sich nicht deaktivieren.
Speichern
Abbrechen
Essenziell (1)
Essenzielle Cookies werden für die grundlegende Funktionalität der Website benötigt.
Cookies anzeigen