繁体   English   中英

通过类型作为参数并检查

[英]Pass Type as parameter and check

我想建立一个将参数接受为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)

请帮助我检查参数类型。

如果要检查确切的类型,可以使用:

if (t == typeof(double))

鉴于double是结构体,因此对于double来说是很好的,因此不能继承。

如果您想执行更多类似检查(例如,检查类型是否与System.IO.Stream兼容),则可以使用Type.IsAssignableFrom

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

例如,如果tSystem.IO.MemoryStream (或者它是System.IO.Stream本身),则将匹配。

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

你可以试试

  if(t == typeof(double))

要么

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

要么

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

要么

 if(t.Name == "Double")

我个人更喜欢第一个选择

看一下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))。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM