2010-10-05 27 views
2

的想法很簡單任何人曾經試圖通過一個運算符作爲函數的值?

的是,例如,計算功能

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

End Function 

有人試過嗎?

我不想爲每個操作(乘法,除法等)使用函數。

我想通過一個運算符,因爲我傳遞的值。 爲什麼沒有人在VB中有這種需求? 使用枚舉可以但仍然...那不是它...

回答

4

您不能通過一個運算符,但您可以通過一個功能,實現該運算符。下面是一個簡短而完整的程序來演示:

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,但答案的要點是準確的。

+0

我沒有想到這樣! – Besnik 2010-10-05 14:31:11

+0

讓我更好地制定問題。 – Besnik 2010-10-05 14:32:13

相關問題