如何在C#中找到对象类型?

How to find an object type in C#?

本问题已经有最佳答案,请猛点这里访问。

我有一些已知类型的对象的可观察集合,但是当对它们进行迭代时,我不知道当前对象的类型。

如何获取当前对象的类型?


要在运行时获取对象的类型,应该调用GetType()。如果您知道对象可以是几种已知类型,则可以使用switch语句:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Type t = obj.GetType();

switch (t.Name)
{
    case"Int32":
        Console.WriteLine("int type");
        break;
    case"String":
        Console.WriteLine("string type");
         break;
    default:
        Console.WriteLine("Another type");
        break;
}

如果只有几个不同的类型,并且根据类型采取不同的操作,则可以使用is检查每种类型:

1
2
3
4
5
6
foreach(var thing in collection){
    if(thing is TypeA){
        doTypeA();
    }else if(thing is TypeB){
        doTypeB();
}

另一个可能的选择是,如果设计合理并且对象在您的控制之下,让它们都实现一个接口,其中包含一个方法来获取描述类型的枚举?然后你可以打开它。


如果您有一个具有通用类型的ObservableCollection,您可以编写类似这样的内容来了解其中的内容:

1
2
3
// Assume this is your observable collection
var observableCollection = new ObservableCollection<string>();
Type type = observableCollection.GetType().GetGenericArguments()[0];

您可以使用gettype方法。这样地:

1
2
3
4
ObservableCollection<object>  coll = new ObservableCollection<object>();

    var a = this.coll[0].GetType();
    var b = this.coll[1].GetType();

您必须使用gettype方法,如这里描述的gettype

1
Object.GetType()

如果您知道类型,可以使用typeof(object)检查它们,如下所示此处描述:类型