2009-04-13 122 views

回答

26

您必須爲此使用泛型。例如,

protected T Test<T>(T parameter) 
{ 

} 

在這個例子中,「<T>」告訴它代表一個類型的名稱編譯器,但你不知道這是在創造這個函數的上下文是什麼。

protected int Test(string p) { ... } 
protected string Test(DateTime p) { .... } 
1

然後,你需要使用泛型。

protected T Test(T type) { 

return type; 

} 
+0

@Shiko,其實如果你看的時間戳,這次來到亞當的答案之前。 – uchamp 2016-12-08 19:39:23

+0

@uchamp我的不好,我會刪除我的評論 – Shiko 2016-12-09 01:52:14

5

事實上,假設你有一組已知的參數和返回類型,它可以用簡單的重載處理不是一種動態語言。要在C#中解決這個問題,您可以稍後返回一個通用對象和類型轉換爲任何您認爲值應該是 - 不建議。你也可以返回一個接口,這樣你並不真正在意某個特定的類實例。正如其他人指出的,你也可以使用泛型。這真的取決於你在函數體內需要/想要做什麼,因爲上面的所有方法都有其自身的侷限性。

+0

這裏的問題是如果調用者在調用之前不知道類型。例如,只有一個字符串或int不是兩個都有效。 – rolls 2017-06-23 05:00:32

+0

@rolls - 當然他有。他將某種類型的變量(或常量)傳遞給該方法。他將返回值放入某種類型的變量中。他顯然希望在不同類型的不同地方使用相同的方法。 – 2017-06-23 19:59:41

1

C#:那麼你最終調用它像...

int foo; 

int bar = Test<int>(foo); 
13

雖然接受的答案是好的,它已經兩年多,因爲它是書面的,所以,我要補充一點,你可以使用:

protected dynamic methodname(dynamic input) 
{ 
    return input; 
} 

輸入將返回爲同一類型,和你不需要將該方法作爲通用方法調用。

參考:
https://msdn.microsoft.com/en-us/library/dd264736.aspx