【问题标题】:How to find an object type in C#? [duplicate]如何在 C# 中查找对象类型? [复制]
【发布时间】:2016-02-19 22:37:12
【问题描述】:

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

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

【问题讨论】:

标签: c# object types casting


【解决方案1】:

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

foreach(var thing in collection){
    if(thing is TypeA){
        doTypeA();
    }else if(thing is TypeB){
        doTypeB();
}

如果它具有设计意义并且对象在您的控制之下,另一个可能的选择是让它们都实现一个接口,该接口包括一个获取描述类型的 Enum 的方法?然后你就可以打开它了。

【讨论】:

    【解决方案2】:

    您可以使用 GetType 方法。 像这样:

    ObservableCollection<object>  coll = new ObservableCollection<object>();
    
        var a = this.coll[0].GetType();
        var b = this.coll[1].GetType();
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        您必须使用 GetType 方法,如此处所述 GetType

        Object.GetType()
        

        如果你知道类型,你可以用 typeof(object) 来检查它们,如 此处描述:typeof

        【讨论】:

          【解决方案5】:

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

          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;
          }
          

          【讨论】:

            猜你喜欢
            • 2010-09-25
            • 1970-01-01
            • 2016-05-31
            • 1970-01-01
            • 2018-05-28
            • 2013-12-08
            • 2012-01-12
            • 2011-01-25
            相关资源
            最近更新 更多