将Type作为参数传递并检查

时间:2015-07-17 05:52:32

标签: c# asp.net types

我想构建一个接受参数Type的方法,如

void M1(Type t)
{
  // check which type it is
}

并将其称为

M1(typeof(int));

我不知道如何检查方法体中的type

我试过了

if (t is double)

但它正在发出警告

The given expression never provided type (double)

请帮我检查参数类型。

3 个答案:

答案 0 :(得分:4)

如果您想检查完全类型,可以使用:

if (t == typeof(double))

这对于double来说很好,因为它是一个结构,所以不能继承。

如果你想进行更像是一次检查 - 例如要检查某个类型是否与System.IO.Stream兼容 - 您可以使用Type.IsAssignableFrom

if (typeof(Stream).IsAssignableFrom(t))

如果tSystem.IO.MemoryStream,那么该匹配就会匹配(或者如果它是System.IO.Stream本身)。

我总是发现自己不得不仔细思考以确定调用的方向,但调用的目标是通常 typeof表达式。

答案 1 :(得分:3)

你可以尝试

  if(t == typeof(double))

 if (typeof(double).IsAssignableFrom(t))

 if(t == default(double).GetType())

 if(t.Name == "Double")

我个人更喜欢第一个选项

答案 2 :(得分:0)

查看IsAssignableFrom,它确定是否可以将指定类型的实例分配给当前类型实例。

public void M<T>(T value) 
{
    if (typeof(T).IsAssignableFrom(typeof(double)))
        Console.Write("It's a double");  
}

如果给定的参数:

,则返回true
  • 表示相同的类型。

  • 直接或间接地从当前实例派生。

  • 是泛型类型参数,当前实例表示参数的约束之一。

  • 表示值类型,当前实例表示Nullable(在Visual Basic中为Nullable(Of Paramerter))。