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?或者是其他任何方式?谢谢你的帮助
答案 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
小心内存泄漏,并在使用后立即从列表中删除对象。