如何比较类型

时间:2011-03-30 06:44:34

标签: c# .net

快速提问:如何在C#中将Type类型(双关语)与其他类型进行比较? 我的意思是,我有Type typeField,我想知道它是System.StringSystem.DateTime等,但typeField.Equals(System.String)不起作用。

有任何线索吗?

5 个答案:

答案 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