0

好的,

不可能将结构实例存储在相同类型的结构中。那么有人可以帮我找到解决方法吗?

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

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

显然,它创造了一个无休止的循环,因为一个人会创造一个新的,然后再创造一个新的,依此类推......

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

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

谢谢

4

2 回答 2

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);
        }
    }
}
于 2013-07-07T16:34:37.343 回答
1

您不能将 X 类型的结构存储在 X 类型的结构中。但是,您可能无论如何都不想这样做,因为通常,结构(和类,就此而言)应该只存储它们需要的数据完全的。相反,您可以使用一个函数来构建并返回结构的“规范化”版本:

public struct Vector3
{
    float x,y,z;
    public Vector3 Normalized 
    { 
        get 
        { 
            ... build the normalized struct and return it ... 
        } 
    }
}
于 2013-07-07T16:26:24.480 回答