如何比较types

快速的问题:如何比较typestypes(双关语不打算)与另一种types在C#中? 我的意思是,我有一个Type typeField ,我想知道它是否是System.StringSystem.DateTime等,但typeField.Equals(System.String)不起作用。

任何线索?

尝试以下

 typeField == typeof(string) typeField == typeof(DateTime) 

C#中的typeof运算符将为您提供指定Type对象。 Type实例与==运算符相媲美,所以这是比较它们的好方法。

注意:如果我没有记错的话,在涉及的types是embedded到程序集中的COM接口(通过NoPIA)的情况下,会出现这种情况。 听起来不像这里是这样的情况。

你可以使用is 运算符 。 然后你可以通过写入来检查对象是否是特定的types:

 if (myObject is string) { DoSomething() } 

您可以使用以下内容来比较完全相同的types:

 class A { } var a = new A(); var typeOfa = a.GetType(); if (typeOfa == typeof(A)) { } 

typeof从给定的类返回Type对象。

但是,如果您有一个typesB,从Ainheritance,那么这个比较是错误的。 而你正在寻找IsAssignableFrom 。

 class B : A { } var b = new B(); var typeOfb = b.GetType(); if (typeOfb == typeof(A)) { // false } if (typeof(A).IsAssignableFrom(typeOfb)) { // true } 

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

如果你的实例是一个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仅转换为指定的types。