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.

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.

Über den Autor

Norbert Eder

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

Hinterlasse einen Kommentar