快速提问:如何在C#中将Type类型(双关语)与其他类型进行比较?
我的意思是,我有Type typeField
,我想知道它是System.String
,System.DateTime
等,但typeField.Equals(System.String)
不起作用。
有任何线索吗?
答案 0 :(得分:161)
尝试以下
typeField == typeof(string)
typeField == typeof(DateTime)
C#中的typeof
运算符将为您提供指定类型的Type
对象。 Type
个实例与==
运算符具有可比性,因此这是比较它们的好方法。
注意:如果我没记错的话,在某些情况下,如果涉及的类型是嵌入到程序集中的COM接口(通过NoPIA),则会出现故障。这听起来不是这样的。
答案 1 :(得分:62)
您可以使用is
operator。然后,您可以通过编写以下内容来检查对象是否是特定类型:
if (myObject is string)
{
DoSomething()
}
答案 2 :(得分:28)
您可以使用以下方法比较完全相同的类型:
class A {
}
var a = new A();
var typeOfa = a.GetType();
if (typeOfa == typeof(A)) {
}
typeof从给定的类返回Type对象。
但是如果你有一个继承自A的类型B,那么这个比较是错误的。你正在寻找IsAssignableFrom。
class B : A {
}
var b = new B();
var typeOfb = b.GetType();
if (typeOfb == typeof(A)) { // false
}
if (typeof(A).IsAssignableFrom(typeOfb)) { // true
}
答案 3 :(得分:4)
如果您的实例是Type
:
Type typeFiled;
if (typeField == typeof(string))
{
...
}
但如果您的实例是object
而不是Type
,请使用as
运算符:
object value;
string text = value as string;
if (text != null)
{
// value is a string and you can do your work here
}
这样做的好处是只将value
转换为指定的类型。
答案 4 :(得分:2)
http://msdn.microsoft.com/en-us/library/system.type.gettype.aspx
Console.WriteLine("typeField is a {0}", typeField.GetType());
会给你类似的东西
typeField is a String
typeField is a DateTime
或
http://msdn.microsoft.com/en-us/library/58918ffs(v=vs.71).aspx