这个想法很简单
这是一个计算函数,例如
Function Calculate (Byval v1 as integer, Byval v2 as integer, byval op as ????????) as double
return v1 op v2
End Function
有人试过这个吗?
我不想为每个操作使用函数(乘法,除法等)。
我想传递一个与传递值相同的运算符。 怎么没有人在VB中有这种需求?! 使用枚举可以工作,但仍然......那不是它......
答案 0 :(得分:4)
您无法传递运算符,但可以传递实现运算符的 Function 。这是一个简短但完整的程序来演示:
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
请注意,我直接在回复窗口中键入了这个内容,因此某处可能存在错误。另请注意,最后一个示例仅适用于Visual Studio 2010.但答案的要点是准确的。