C# - 在同一类型的结构中存储结构

时间:2013-07-07 16:14:11

标签: c# struct nested

确定,

无法在同一类型的结构中存储结构实例。那么有人可以帮我找一个解决方法吗?

我需要将vector3存储在vector3中,如下所示:

public struct Vector3{
   float x,y,z;
   Vector3 normalized;
}

显然,它创造了一个无休止的循环,因为人们会创造一个新的创造一个新的等等......

那怎么会这样呢?我需要将我的规范化为Vector3,因为它需要被识别,并且不能是任何其他命名。

最后,我知道这可以通过课程实现,但我不想要。

谢谢

2 个答案:

答案 0 :(得分:2)

嗯,结构是一种值类型。声明一个递归结构会创建一个无限大的结构!解决方法是将其声明为类。但在这里,我只是将Normalized声明为属性。

public struct Vector3 {
    public Vector3(float x, float y, float z)
    {
        X = x;
        Y = y;
        Z = z;
    }

    public float X { get; private set; }
    public float Y { get; private set; }
    public float Z { get; private set; }

    public float Length {
        get { return (float)Math.Sqrt(X * X + Y * Y + Z * Z); }
    }

    Vector3 Normalized {
        get {
            float l = Length;
            return new Vector3(X / l, Y / l, Z / l);
        }
    }
}

答案 1 :(得分:1)

你不能在X类型的结构中存储X类型的结构。但是,你可能不想这样做,因为一般,结构(和类,就此而言) )应该只存储他们需要完成的数据。相反,您可以拥有一个构建并返回结构的“规范化”版本的函数:

public struct Vector3
{
    float x,y,z;
    public Vector3 Normalized 
    { 
        get 
        { 
            ... build the normalized struct and return it ... 
        } 
    }
}