检查类型

问题描述:

我想检查,方法的参数已,为了给其类型 我确定与所希望的类型的方法内的变量:检查类型

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

returntype == typeof(string) 

不需要调用GetType,因为你已经一个类型。 (GetType无论如何不会返回有用的答案,它会返回typeof(Type))。

使用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

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

我相当喜欢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

在这种情况下,你只是想检查该returntype相同类型string。当比较Type情况下,最好的途径是简单地使用==操作

return returntype == typeof(string); 

如果您有与COM接口来处理,虽然你将要使用的,而不是==

return returntype.IsEquivalentTo(typeof(TheInterface)); 

这个IsEquivalentTo方法是必要的,因为COM中的嵌入式互操作类型将显示为不同的Type实例。 IsEquivalentTo方法将检查它们是否代表相同的基础类型。