使用typeof()搜索所有对象

时间:2016-06-29 08:45:34

标签: c# typeof gettype

public class ClassA
{
   int num = 10;
}

ClassA a = new ClassA();
ClassA b = new ClassA();
ClassA c = new ClassA();
a.GetType(); //we can get result "ClassA"

这是我的问题。无论如何,我可以通过使用typeof(ClassA)获得ClassA的所有Object?或者是其他任何方式?谢谢你的帮助

3 个答案:

答案 0 :(得分:0)

如果你想

  

获取ClassA的所有Object

您可能希望将ClassA个实例整理到集合,比如数组,然后使用 Linq

Object[] source = new Object[] {
  "String",
  new ClassA(), // this 
  new Object(),
  new ClassA(), // and this should be filtered out
  null
};

...

ClassA[] result = source
  .OfType<ClassA>()
  .Where(item => item != null) // you may want this filter
  .ToArray();

答案 1 :(得分:0)

无法获取方法,线程或其他任何类中存在的类的所有实例,您必须自己记住它们。然而,并非真正需要这样做。

想象一下,你有四种不同的汽车:

Car c1 = new Car();
Car c2 = new Car();
Car c3 = new Car();
Car c4 = new Car();

现在您必须选择:要么记住变量名称并尝试通过该名称获取他们代表的汽车(这很可能,因为您很快就会发现)或将所有Car - 实例放入一个集合:

List<Car> cars = new List<Car>();
cars.Add(c1);
cars.Add(c2);
cars.Add(c3);
cars.Add(c4);

现在您不会关心这些变量的名称,因为您可以直接访问它们。您可以通过此方式访问它们,例如:

Car myCar = cars.Single(x => x.Name == "BMW");

或者替代地:

Car myCar = cars[1]; // get the second car within the collection

答案 2 :(得分:-2)

C#没有API来检索所有对象。因此,您必须编写自己的代码。

public class ClassA
{
    int num = 10;

    public static List<ClassA> Objects { get; } = new List<ClassA>();
    public ClassA()
    {
        objects.Add(this);
    }
}

使用静态列表存储创建的对象。

ClassA a = new ClassA();
ClassA b = new ClassA();
ClassA c = new ClassA();

Console.WriteLine(ClassA.Objects[0]); //a
Console.WriteLine(ClassA.Objects[1]); //b
Console.WriteLine(ClassA.Objects[2]); //c

小心内存泄漏,并在使用后立即从列表中删除对象。