ich eine gemeinsame Code-Bibliothek zu schreiben, die Async/erwarten und bedingte Kompilierung
- eine glänzende neue portable Klassenbibliothek für mobile Geräte in verwendet werden und
- ein Legacy-Projekt .NET 3.5 verwenden.
So enthält mein Code eine Menge derer:
#If PCL Then
Await AlertAsync("...some message...", "...some title...")
#Else
MessageBox.Show("...some message...", "...some title...")
#End If
, die sich wiederholt und damit hässlich.
Normalerweise, wenn sich etwas wiederholt, ist die Lösung, es zu einer Methode zu extrahieren. Leider sehe ich hier nicht, wie man das macht (1) I mussawait
verwenden, um die Methode im PCL-Fall aufzurufen und (2) I muss nicht in .NET 3.5 await
verwenden, da der Compiler kann geh nicht damit um. Ich würde Liebe, so etwas haben:
AwaitIfNet45OrHigher ShowAlert("...some message...", "...some title...")
...
#If PCL Then
Private Async Function ShowAlert(...) As Task
...async implementation...
End Sub
#Else
Private Sub ShowAlert(...)
....NET 3.5 implementation...
End Sub
#End If
Aber leider gibt es kein AwaitIfNet45OrHigher
Schlüsselwort in der VB.NET Sprache.
Jede andere Lösung, die ich verpasst habe (abgesehen von der Verwendung von T4-Makros)?
Warum haben Sie nicht zwei Methoden, ShowAlert und ShowAlertAsync und kompilieren nicht die zweite für 3.5? –
@ScottChamberlain: Das ist im Grunde, was ich gerade habe (ersetzen Sie einfach MessageBox.Show mit ShowAlert und AlertAsync mit ShowAlertAsync im ersten Codebeispiel). Ich brauche immer noch 5 Codezeilen und erwähne jeden Parameter zweimal. Ich möchte eine Codezeile und erwähne jeden Parameter einmal. :-) – Heinzi
Sie könnten Else und EndIf nach dem Methodennamen aber vor den Parametern setzen. –