我正在编写将在
中使用的共享代码库因此,我的代码包含很多:
#If PCL Then
Await AlertAsync("...some message...", "...some title...")
#Else
MessageBox.Show("...some message...", "...some title...")
#End If
这是重复的,因此很难看。
通常,如果某些事情是重复的,那么解决方案就是将其提取到方法中。不幸的是,我不知道如何在这里做到这一点,因为(1)我必须使用await
来调用PCL案例中的方法和(2)我必须不在.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宏)?
答案 0 :(得分:0)
看一下AsyncBridge,您只需要在项目中添加一个文件,以便在.NET 4.0 / 3.5中使用await / async。
答案 1 :(得分:-1)
作为一般经验法则不应使用条件编译符号。 例外情况可能是" #if DEBUG"
但是对于这样的事情,特别喜欢这样。您需要退后一步并遵循正确的.Net库架构。
这两件事可能看起来一样,但它们完全不同。 您需要为.NET 4.5创建一个新库 - 当你拉入项目时,你会有两个版本的项目
但是从长远来看,更清洁的文件可以为您节省大量时间。 更不用说.net 3.5即将推出。 此外,还有一大堆真正令人敬畏的功能在4.5中添加。也许是时候完全重新修改图书馆以获得最新和最好的功能。
要添加,处理器升级重写可以完成peacemill。仅在版本化项目中重写您现在需要的函数,并在可移植库中引用它们。