c#对象被奇怪地删除了

时间:2009-10-12 00:10:27

标签: c# xna

按下按钮后执行此代码。

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using xnaWindow.FormUI;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace xnaWindow.MathClass
{    
    public class Math_Vector 
    {
        private Vector3 vectorA;
        private Vector3 vectorB;
        private Vector3 vectorR;
        private List<float> vResult;

        VertexPositionColor[] verts1,verts2,verts3;

        public void calculate(List<float>v1,List<float>v2)
        {
            Console.WriteLine("calculating..");

            vResult = new List<float>(); 
            vectorA = new Vector3(v1.ElementAt(0), v1.ElementAt(1), v1.ElementAt(2));  
            vectorB = new Vector3(v2.ElementAt(0), v2.ElementAt(1), v2.ElementAt(2)); 

            //this is the manual calculation of vector addition
            float xRes = v1.ElementAt(0) + v2.ElementAt(0);
            float yRes = v1.ElementAt(1) + v2.ElementAt(1);
            float zRes = v1.ElementAt(2) + v2.ElementAt(2);

            vectorR = new Vector3(xRes,yRes,zRes);
            //vectorR = vectorA + vectorB; 

            verts1    = new VertexPositionColor[2];
            verts1[0] = new VertexPositionColor(new Vector3(0, 0, 0), Color.Black);
            verts1[1] = new VertexPositionColor(vectorA, Color.Black);

            verts2    = new VertexPositionColor[2];
            verts2[0] = new VertexPositionColor(new Vector3(0, 0, 0), Color.Black);
            verts2[1] = new VertexPositionColor(vectorB, Color.Black);

            verts3    = new VertexPositionColor[2];
            verts3[0] = new VertexPositionColor(new Vector3(0, 0, 0), Color.Black);
            verts3[1] = new VertexPositionColor(vectorR, Color.Black);

            int i = 0;
            //this is for console debug
            foreach (float va in v1)
            {
                Console.WriteLine("adding " + va.ToString() + v2.ElementAt(i).ToString());
                vResult.Add(va+v2.ElementAt(i));
                i++;
            }

        }

        public Vector3 getV1(){return vectorA;}
        public Vector3 getV2(){return vectorB;}
        public Vector3 getV3(){return vectorR;}

        public VertexPositionColor[] getVertex1( )
        { 
            return verts1;
        } 
        public VertexPositionColor[] getVertex2()
        {
            return verts2;
        }
        public VertexPositionColor[] getVertex3()
        {
            return verts3;
        }
    }
}
奇怪的是,verts1,vertes2,verts3在退出函数后总是变为空。 所以我执行后调用的getters方法总是返回null。

我该怎么办?

这是我对吸气剂的呼唤

math.calculate(v1, v2);
verts1 = math.getVertex1();
verts2 = math.getVertex2();
verts3 = math.getVertex3();

2 个答案:

答案 0 :(得分:1)

如果我不得不猜测我很确定你使用的是结构而不是类。而且很可能你只是处理结构实例,就像对类忘记它们是按值复制一样。因此,您可能会在某个地方获得未初始化的内容(您看到的内容为“NULL”)。

答案 1 :(得分:0)

在摆弄代码3天后,我现在知道问题所在。 如果你下载了我的代码,并没有注意到它,

显然程序很困惑,他们需要计算哪个文本框,以及触发什么的按钮。这是由List&lt;&gt;

中的控件引起的

在form_ui中有一些方法可以将一些控件添加到列表&lt;&gt;中。 我已经放置了从容器中删除列表内容的代码。但它仍然没有删除内部。 !!!!!!!!!!!!!!! XDXP

所以我必须在列表中放置clear()。然后里面的一切都消失了。

现在问题已经消失。