2009-10-12 44 views
2

这个代码在按下按钮后被执行。c#对象被奇怪地删除了

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(); 
+0

你是否调用了你调用的同一个实例的getter? – Guffa 2009-10-12 00:17:18

+0

是的,我愿意。我将在这篇文章后张贴我的电话。 你知道如何不让编译器删除对象吗?像protectThisVariable(verts1); ??? – r4ccoon 2009-10-12 00:22:46

+0

@ r4ccoon如果你的对象存储在成员变量中,所有其他事物都是相等的,它们不应该丢失它们的值。 – 2009-10-12 00:25:55

回答

0

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

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

在form_ui中有一些方法将一些控件添加到列表中<>。 我已经把代码从容器中删除列表的内容。但它仍然没有删除里面。 !!!!!!!!!!!!!!! XDXP

所以我必须把清除()列表中。那么里面的一切都消失了。

现在问题没有了。

1

如果我猜我敢肯定你正在使用的替代类结构。最有可能的是,您只是像处理类忘记它们是按值复制一样对结构实例进行处理。所以你可能会在某个地方得到一个未初始化的东西(你看到的是“NULL”)。

+0

+1,听起来像是任何人想要得到的最合理的结论,直到你可以分享更多的代码。 – 2009-10-12 20:12:49

+0

nope。这是一个班级。并没有一个是结构。 我有结构之前的问题,但我已经改变他们类。 – r4ccoon 2009-10-13 01:00:32

+0

这里是我的项目的链接。 http://www.mediafire.com/?sharekey=ff6f03bd91e7612bab1eab3e9fa335ca0b62c612f301a16b – r4ccoon 2009-10-13 01:25:59