考虑以下两个功能:是否有可能限制参数不是代表?
'Overload 1
<Extension()>
Function ComputeReturnValue(Of TSource, TResult)(ByVal source As TSource, ByVal IfTrueFunc As
System.Func(Of TSource, TResult), ByVal IfFalseFunc As System.Func(Of TSource, TResult)) As TResult
Return If([some test is true], IfTrueFunc(source), IfFalseFunc(source))
End Function
'Overload 2
<Extension()>
Function ComputeReturnValue(Of TSource, TResult)(ByVal source As TSource, ByVal IfTrueValue As
TResult, ByVal IfFalseFunc As TResult) As TResult
Return If([some test is true], IfTrueValue, IfFalseValue)
End Function
在词语,ComputeReturnValue
执行一些测试(未重要现在),并返回根据结果不同的值。我有两个版本,因为有时我想返回调用函数的结果来形成结果,有时我只想返回固定值。
的问题是,当我(尝试)调用超载1,而不是调用正确的函数,编译器调用超载2,并返回Func(Of TSource, TResult)
对象,而不是调用作用的结果。我发现这是因为重载2不限制类型,所以Func是这个例程的有效参数,我愿意相信在这种情况下编译器会正确选择重载。
我的问题是:什么是实现这个解决歧义,这样我可以通过值或引用类型,并得到过载2,但传递函数,并得到过载1的正确方法?我可以通过某种方式限制这些类型以实现此目的吗?或者我应该给他们起个不同的名字并避免这个问题?
(我知道我可以只保留函数功能的版本,并在琐碎Function() IfTrueValue
传递时,我想返回一个值,但我试图让这句法含糖越好。)
我相信你是对的。我会给他们不同的名字。谢谢。 – 2012-02-03 16:45:34