本文发表在 rolia.net 枫下论坛比如,C#我有如下操作
Action<string> a = s => Console.WriteLine(s);
a("C# good");
简单优美,再看看我用VB该怎么写,按理说应该这么写
VB里面优美俺是想也不敢想的,只求尽量简单一些
Module Module1
Sub Main()
Dim ac As Action(Of String)
ac = Sub(x) Console.WriteLine(x)
ac("VB SUCKS")
End Sub
End Module
原以为很轻松的一种转换,居然没法通过编译,微软VB小组的人难道都是吃shit的?
我只能把程序改成这个样子
Sub Main()
Dim ac As Action(Of String)
ac = AddressOf Print
ac("VB sucks")
End Sub
Sub Print(ByVal x As String)
Console.WriteLine(x)
End Sub
也就是说,我没法用像在C#里面那样用一条语句完成对Action变量的赋值,而必须引用另外一个函数的名字,对于用惯了C#的程序员,这简直就是噩梦
或者,我把程序改成这个样子,也可以
Module Module1
Sub Main()
Dim ac As Action(Of String)
ac = AddressOf Print
ac("VB sucks")
ac = Function(s) Print1(s)
ac("VB sucks again")
End Sub
Sub Print(ByVal x As String)
Console.WriteLine(x)
End Sub
Function Print1(ByVal x As String) As String
Console.WriteLine(x)
Return x
End Function
End Module
看到没有,我用Function也可以,但是必须要返回个没有意义的数值。浪费资源,时间,感情,但关键是对事情本来意义的颠覆,Action的定义是不返回任何值的,但是在VB里面居然允许用Function来返回值,而且编译也不出错
更糟糕的是,因为这些限制,有些在C#里面极其容易实现的功能在VB里面很难实现更多精彩文章及讨论,请光临枫下论坛 rolia.net
Action<string> a = s => Console.WriteLine(s);
a("C# good");
简单优美,再看看我用VB该怎么写,按理说应该这么写
VB里面优美俺是想也不敢想的,只求尽量简单一些
Module Module1
Sub Main()
Dim ac As Action(Of String)
ac = Sub(x) Console.WriteLine(x)
ac("VB SUCKS")
End Sub
End Module
原以为很轻松的一种转换,居然没法通过编译,微软VB小组的人难道都是吃shit的?
我只能把程序改成这个样子
Sub Main()
Dim ac As Action(Of String)
ac = AddressOf Print
ac("VB sucks")
End Sub
Sub Print(ByVal x As String)
Console.WriteLine(x)
End Sub
也就是说,我没法用像在C#里面那样用一条语句完成对Action变量的赋值,而必须引用另外一个函数的名字,对于用惯了C#的程序员,这简直就是噩梦
或者,我把程序改成这个样子,也可以
Module Module1
Sub Main()
Dim ac As Action(Of String)
ac = AddressOf Print
ac("VB sucks")
ac = Function(s) Print1(s)
ac("VB sucks again")
End Sub
Sub Print(ByVal x As String)
Console.WriteLine(x)
End Sub
Function Print1(ByVal x As String) As String
Console.WriteLine(x)
Return x
End Function
End Module
看到没有,我用Function也可以,但是必须要返回个没有意义的数值。浪费资源,时间,感情,但关键是对事情本来意义的颠覆,Action的定义是不返回任何值的,但是在VB里面居然允许用Function来返回值,而且编译也不出错
更糟糕的是,因为这些限制,有些在C#里面极其容易实现的功能在VB里面很难实现更多精彩文章及讨论,请光临枫下论坛 rolia.net