我正在写一个共享代码库将在异步/等待和条件编译
- 一个全新的便携式类库为移动设备和
- 遗留项目中使用.NET 3.5中使用。
因此,我的代码中含有大量的那些:
#If PCL Then
Await AlertAsync("...some message...", "...some title...")
#Else
MessageBox.Show("...some message...", "...some title...")
#End If
这是重复的,因此,难看。
通常,如果某件事是重复的,解决办法是将它提取到一个方法。不幸的是,我没有看到如何做到这一点,因为(1)I 必须使用使用await
来调用PCL情况下的方法和(2)I 不得使用在.NET 3.5中使用await
,因为编译器可以没有办法。我倒是爱有类似的东西:
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
但是,唉,没有在VB.NET语言中没有AwaitIfNet45OrHigher
关键字。
我错过的任何其他解决方案(除了诉诸于T4宏)?
为什么不使用ShowAlert和ShowAlertAsync两种方法,并且不能编译3.5的第二个方法? –
@ScottChamberlain:这基本上就是我现在所拥有的东西(只是在第一个代码示例中用ShowAlert和AlertAsync在ShowAlertAsync中精神上代替了MessageBox.Show)。我仍然需要5行代码,并提到每个参数两次。我想要一行代码并提一次每个参数。 :-) – Heinzi
您可以将Else和EndIf放在方法名称之后但在参数之前。 –