代码之家  ›  专栏  ›  技术社区  ›  r4ccoon

对象被奇怪地删除了

  •  2
  • r4ccoon  · 技术社区  · 15 年前

    此代码在按下按钮后执行。

        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、Verts2、Verts3在退出函数后总是被置空。 所以我在执行之后调用的getters方法总是返回空值。

    我该怎么办伙计们?

    这是我的号召

    math.calculate(v1, v2);
    verts1 = math.getVertex1();
    verts2 = math.getVertex2();
    verts3 = math.getVertex3();
    
    2 回复  |  直到 15 年前
        1
  •  1
  •   Foxfire    15 年前

    如果我不得不猜的话,我很确定你使用的是结构而不是类。很可能您只是像对待类那样对待结构实例,而忘记了它们是按值复制的。所以你可能在某个地方得到一个未初始化的(你看到的是“空”)。

        2
  •  0
  •   r4ccoon    15 年前

    在修改代码3天后,我现在知道问题出在哪里了。 如果你下载了我的代码却没有注意到,

    显然,程序混淆了他们需要计算哪个文本框,以及触发什么的按钮。这是由列表中的控件引起的<gt;

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

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

    现在问题解决了。