C # объект был удален странным образом - PullRequest
2 голосов
/ 12 октября 2009

этот код выполняется после нажатия кнопки.

    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 ]

1 голос
/ 12 октября 2009

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

0 голосов
/ 13 октября 2009

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

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

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

поэтому я должен поставить clear () в списке. тогда все внутри ушло.

теперь эта проблема ушла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...