2013-03-19 110 views
3

我想檢查,方法的參數已,爲了給其類型 我確定與所希望的類型的方法內的變量:檢查類型

public static Object getFileContent(String filename, Type returntype) 
{ 
    if (returntype.GetType().Equals(string)) 
    { 
     // do something 
    } 
} 

這不工作。我能做些什麼來檢查返回類型是string還是List<string>

+3

難道你不會更好使用這裏的通用方法,'公共靜態T getFileContent (字符串文件名)'? – RoadieRich 2013-03-19 15:56:02

回答

5
returntype == typeof(string) 

不需要調用GetType,因爲你已經一個類型。 (GetType無論如何不會返回有用的答案,它會返回typeof(Type))。

0

使用typeof操盤

if (returntype.Equals(typeof(string))) 
{ 
    // do something 
} 

或只是

if (returntype == typeof(string)) 
{ 
    // do something 
} 
+1

爲什麼不只是'=='在這裏? – 2013-03-19 15:50:18

+0

@MarcGravell我剛剛開始那個;) – 2013-03-19 15:51:28

0
if(returnType == typeof(String) || return == typeof(List<String>)) 
    //logic 
-1

我相當喜歡is運營商自己:

if (returntype is string) 
{ 
    // do something 
} 
+0

returntype的類型總是'Type'。問題是這個'Type'是否等於'typeof(string)'。 – Corak 2013-03-19 15:52:30

+0

再次說明:此語法不存在。您正在將C#的''作爲''''''操作符與VB的'TypeOf ... Is ...'操作符混合在一起。 – 2013-03-19 15:52:32

+0

好的,嚴重:「is」有什麼問題?我想你也不使用'as'? – 2013-03-19 15:52:36

0

在這種情況下,你只是想檢查該returntype相同類型string。當比較Type情況下,最好的途徑是簡單地使用==操作

return returntype == typeof(string); 

如果您有與COM接口來處理,雖然你將要使用的,而不是==

return returntype.IsEquivalentTo(typeof(TheInterface)); 

這個IsEquivalentTo方法是必要的,因爲COM中的嵌入式互操作類型將顯示爲不同的Type實例。 IsEquivalentTo方法將檢查它們是否代表相同的基礎類型。