有人试过将运算符作为函数的值传递吗?

时间:2010-10-05 13:17:45

标签: vb.net

这个想法很简单

这是一个计算函数,例如

Function Calculate (Byval v1 as integer, Byval v2 as integer, byval op as ????????) as double
return v1 op v2

End Function

有人试过这个吗?

我不想为每个操作使用函数(乘法,除法等)。

我想传递一个与传递值相同的运算符。 怎么没有人在VB中有这种需求?! 使用枚举可以工作,但仍然......那不是它......

1 个答案:

答案 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.但答案的要点是准确的。