这个想法很简单
例如,这是一个计算函数
Function Calculate (Byval v1 as integer, Byval v2 as integer, byval op as ????????) as double
return v1 op v2
End Function
Run Code Online (Sandbox Code Playgroud)
有人试过这个吗?
我不想对每个操作(乘法、除法等)都使用函数。
我想传递一个与传递值相同的运算符。为什么在 VB 中没有人有过这种需求?!使用枚举可以工作,但仍然......不是这样......
您不能传递运算符,但可以传递实现该运算符的函数。这是一个简短但完整的程序来演示:
Public Shared Function Add(a As Integer, b As Integer) As Integer
Return a + b
End Function
Public Shared Function Divide(a As Integer, b As Integer) As Integer
Return a \ b ''# Backwards \ is VB integer division
End Function
Public Shared Function Calculate(a As Integer, b As Integer, op As Func(Of Integer, Integer, Integer))
Return op(a, b)
End Function
Public Shared Sub Main()
Console.Write("Divide: ")
Console.WriteLine(Calculate(4,2, AddressOf Divide))
Console.Write("Add: ")
Console.WriteLine(Calculate(4,2, AddressOf Add))
Console.Write("Multiply: ")
Console.WriteLine(Calculate(4,2, Function(x,y) x * y))
Console.Write("Subtract: ")
Console.WriteLine(Calculate(4,2, Function(x,y)
Return x - y
End Function))
Console.ReadKey(True)
End Sub
Run Code Online (Sandbox Code Playgroud)
请注意,我是直接将其输入到回复窗口中的,因此其中可能存在错误。另请注意,最后一个示例仅适用于 Visual Studio 2010。但答案的要点是准确的。