获取所有Vector3类型的变量(struct)并从整个代码中枚举它们

时间:2014-06-25 22:34:06

标签: c# vector struct

首先,这只是我对C#的“学习”,所以它不是家庭作业或类似的东西(我在这里有问题,但我只是一个“狂热”)。我试图获得Vector3类型(struct)的所有值。我需要在我的代码中使用类似的东西:

foreach (Vector3 vector in Vector3.GetVector3List()) //maybe Vector3.GetVector3List<Vector3>()
{
    Console.WriteLine(vector);          
}

它应该在Console中编写用户定义的所有向量。

我的结构的定义(简化):

struct Vector3
{
    private double x, y, z;

    public double X
    {
        get { return x; }
        set { x = value; }
    }

    public double Y
    {
        get { return y; }
        set { y = value; }
    }

    public double Z
    {
        get { return z; }
        set { z = value; }
    }
    public Vector3(double x, double y, double z) : this()
    {
        X = x;
        Y = y;
        Z = z;
    }
}

我不确定我应该以哪种方式继续下去。我尝试过'类似enum的'Getvalues函数,但逻辑上它不能列出所有向量,因为它们没有定义,直到用户不在控制台中执行它。

private static List<T> GetVector3List<T>()
{
    //T[] array = (T[]) Vector3.GetValues(typeof (T));
}

一种方法是将所有输入的矢量存储在List中,然后将WriteLine存储起来,但我想以其他方式执行。有人可以给我一个建议我该如何继续? (或者如果可以从结构中获取所有向量)

1 个答案:

答案 0 :(得分:2)

.NET中没有设施来枚举类的所有实例。更糟糕的是,你选择使它成为struct,这使得这更加不可能,因为堆栈上可能存在结构类型的值,严格来说,枚举过程本身会产生新的结构类型。

如果你使Vector3成为class,那么理论上你可以通过在构造函数中记录创建来跟踪它们,但它在许多方面都是非平凡的。对于初学者,你最好使用弱引用......

严格来说,有一些调试API可以实现这一点,但它们使用起来并不容易,而且我不确定程序是否可以自行使用它们。

关于retrieving all instances of a type is a bad idea原因的奖金文章。