我想构建一个接受参数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)
请帮我检查参数类型。
答案 0 :(得分:4)
如果您想检查完全类型,可以使用:
if (t == typeof(double))
这对于double
来说很好,因为它是一个结构,所以不能继承。
如果你想进行更像是一次检查 - 例如要检查某个类型是否与System.IO.Stream
兼容 - 您可以使用Type.IsAssignableFrom
:
if (typeof(Stream).IsAssignableFrom(t))
如果t
为System.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))。