[英]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))
例如,如果t
是System.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.