2009-10-12 5 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

Вы вызываете геттер в том же экземпляре, который вы назвали вычислением? – Guffa

+0

да я. Я выложу свой звонок в этом сообщении. Знаете ли вы, как не позволить компилятору удалить объект? например protectThisVariable (verts1); ??? – r4ccoon

+0

@ r4ccoon, если ваши объекты хранятся в переменных-членах, при прочих равных условиях они не должны терять свои значения. –

ответ

0

после прошивки кодов на 3 дня, теперь я знаю, в чем проблема. , если вы загрузили мой код и havent заметили его,

Очевидно, программа была смущена, какое текстовое поле они должны вычислить, а какая кнопка запускает что. которые были вызваны элементами управления в списке <>

в форме_ui есть некоторый способ добавить некоторые элементы управления в список <>. Я поместил код, который удаляет содержимое списка из контейнера. но он все еще не удаляет внутреннюю часть. !!!!!!!!!!!!!!! XDXP

поэтому мне нужно поставить clear() в список. то все внутри исчезло.

сейчас эта проблема ушла.

1

Если бы я должен был догадаться, я уверен, что вы используете вместо структур классов. И, скорее всего, вы просто относитесь к экземплярам структуры, как и к классам, забывающим, что они являются копиями по значению. Таким образом, вы, вероятно, получите неинициализацию в каком-либо месте (что вы видите как «NULL»).

+0

+1, звучит как самый разумный вывод, который кто-то здесь придумает, пока вы не сможете поделиться больше кода. –

+0

nope. это класс. и ни одна из них не является структурой. У меня была проблема перед структурой, но я изменил их на класс. – r4ccoon

+0

вот ссылка на мой проект. http://www.mediafire.com/?sharekey=ff6f03bd91e7612bab1eab3e9fa335ca0b62c612f301a16b – r4ccoon

Смежные вопросы