2011-12-02 163 views
1

我有僞碼指定返回類型

T foo<T>(string bar) 
{ 
if (typeof(T) == typeof(string)) 
{ 
    return bar; 
} 
... 

雖然代碼並沒有真正太大的意義,是有可能得到類似上述工作的東西嗎?

我試過return (T)barreturn bar as T無濟於事。

編輯:道歉,僞碼糾正。

+1

因爲你有一個無效的方法,或者我錯過了什麼? – CodeCaster

+0

你想完成什麼?之後會發生什麼? –

+0

你的方法被鍵入爲返回void,你試圖返回什麼? –

回答

4

你可以這樣做:

T foo<T>(string bar) 
{ 
if (typeof(T) == typeof(string)) 
{ 
    return (T)(object)bar; 
} 
... 

但是,如果你正在做的事情不同,這取決於T的類型,你應該重新考慮你的設計......也許泛型不是什麼你最好的選擇正在努力去做。

+0

不確定誰downvoted,但評論爲什麼會很好 –

+1

@jsobo:不知道誰是誰,但答案中的原始代碼顯示'無效'的返回,這可能是爲什麼有人downvoted(編輯後的形式現在是正確的)。 –

+0

@jsobo:看看編輯 – IAbstract

1

您的僞方法是void,所以它不期望返回值。

0

你試圖正確 測試類型例如

if (T.GetType().Equals(typeof(String))) {} 

也它是什麼,你是真正想要做..?你是否熟悉如何使用泛型..?

+2

'T'是一個類型參數,'typeof(T)'是正確的,而不是'T.GetType()' –

0

您必須指定返回類型 - 不void

T foo<T>(string bar){ 
if (typeof(T) == typeof(string)){ 
    return (T)(object)bar; 
} 
} 

但是這並沒有任何意義 - 你爲什麼要這麼做?通常情況下,您的簽名看起來是這樣的:

void foo<T>(T bar){ 
if (typeof(T) == typeof(string)){ 
    // do something useful with bar 
} 
} 

...在上面的例子中,修改void返回無論是一些有用的東西結果。

+1

這將不會編譯...因爲bar是一個字符串不是T ... –

+0

@jsobo:謝謝...編輯 – IAbstract