有没有办法在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