这个代码在按下按钮后被执行。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();
你是否调用了你调用的同一个实例的getter? – Guffa 2009-10-12 00:17:18
是的,我愿意。我将在这篇文章后张贴我的电话。 你知道如何不让编译器删除对象吗?像protectThisVariable(verts1); ??? – r4ccoon 2009-10-12 00:22:46
@ r4ccoon如果你的对象存储在成员变量中,所有其他事物都是相等的,它们不应该丢失它们的值。 – 2009-10-12 00:25:55