有沒有辦法在VB.NET中傳入運算符?我正在尋求減少我的代碼行,並且對於兩個函數,字面上只有一個不同的操作符。通過運算符
例如,我有兩個功能,Darken
和Lighten
。我希望儘可能使用盡可能少的代碼來實現單個功能。唯一的區別是大於和小於運算符。
Function Darken(ByVal clr1 As Color, ByVal clr2 As Color) As Color
Dim newR = If(clr2.R < clr1.R, clr2.R, clr1.R)
Dim newG = If(clr2.G < clr1.G, clr2.G, clr1.G)
Dim newB = If(clr2.B < clr1.B, clr2.B, clr1.B)
Return Color.FromArgb(newR, newG, newB)
End Function
Function Lighten(ByVal clr1 As Color, ByVal clr2 As Color) As Color
Dim newR = If(clr2.R > clr1.R, clr2.R, clr1.R)
Dim newG = If(clr2.G > clr1.G, clr2.G, clr1.G)
Dim newB = If(clr2.B > clr1.B, clr2.B, clr1.B)
Return Color.FromArgb(newR, newG, newB)
End Function
我想什麼是一樣的東西(僞):
Function DarkenLighten(By Val Op As Operator, ByVal clr1 As Color, ByVal clr2 As Color) As Color
Dim newR = If(clr2.R Op clr1.R, clr2.R, clr1.R)
Dim newG = If(clr2.G Op clr1.G, clr2.G, clr1.G)
Dim newB = If(clr2.B Op clr1.B, clr2.B, clr1.B)
Return Color.FromArgb(newR, newG, newB)
End Function
這可能嗎?如果可能,我找不到任何參考。
+1雖然在合併問題中的特定代碼是不是那些'If(...)'表達式只是'Math.Min'和'Math.Max'的重新實現?爲什麼不使用它們呢?你可以把它們作爲'Func(Byte,Byte,Boolean)''來傳遞。 – MarkJ 2010-07-04 15:04:47
@MarkJ:你的意思是'Func(Byte,Byte,Byte)'? – 2010-07-04 15:08:11
嗯......沒關係,如果這樣好,我想這是唯一的方法:( – 2010-07-04 17:05:54