快速问题:如何比较类型类型(双关语不打算)与C#中的另一种类型? 我的意思是,我有一个Type typeField
,我想知道它是否是System.String
,System.DateTime
等,但typeField.Equals(System.String)
不起作用。如何比较类型
任何线索?
快速问题:如何比较类型类型(双关语不打算)与C#中的另一种类型? 我的意思是,我有一个Type typeField
,我想知道它是否是System.String
,System.DateTime
等,但typeField.Equals(System.String)
不起作用。如何比较类型
任何线索?
请尝试以下
typeField == typeof(string)
typeField == typeof(DateTime)
C#中的typeof
运算符将为您提供指定类型的Type
对象。 Type
实例与==
运算符相当,因此这是比较它们的好方法。
注意:如果我没有记错,当涉及的类型是嵌入程序集的COM接口(通过NoPIA)时,会出现这种情况。听起来不像这里是这种情况。
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
您可以比较准确地为使用相同类型:
class A {
}
var a = new A();
var typeOfa = a.GetType();
if (typeOfa == typeof(A)) {
}
的typeof返回从给定类类型的对象。
但是,如果您有一个类型B,从A继承,那么这个比较是错误的。而你正在寻找IsAssignableFrom。
class B : A {
}
var b = new B();
var typeOfb = b.GetType();
if (typeOfb == typeof(A)) { // false
}
if (typeof(A).IsAssignableFrom(typeOfb)) { // true
}
如果您的实例是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
只转换成指定的类型。
感谢您的帮助! :) – Archedius 2011-03-30 07:27:24