考慮以下兩個功能:是否有可能限制參數不是代表?
'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