传递给方法后,对象为null

时间:2015-05-05 18:46:46

标签: c# null

我正在尝试将对象传递给方法。在通话之前,我检查它是否为空,但事实并非如此。在方法内部,对象为null,我不知道为什么。

public class WorldManager : MonoBehaviour {

private Mesh mesh;

private List<int> triangles;
private List<Vector3> vertices;

// Use this for initialization
void Start () {
    mesh = GetComponent<MeshFilter>().mesh;

    OctreeNode rootNode = new OctreeNode (1, new Vector3(0f,0f,0f), 16);
    Octree octree = new Octree (rootNode);
    DualContouring contour = new DualContouring ();
    vertices = octree.vertices;
    if (rootNode == null) {
        Debug.Log ("Node is null"); //It's not
    } else {
        Debug.Log (rootNode.type);
    }
    triangles = contour.ContourOctree (rootNode);

    mesh.Clear ();
    mesh.vertices = vertices.ToArray ();
    mesh.triangles = triangles.ToArray ();
    mesh.Optimize ();
    mesh.RecalculateNormals ();
}

public class DualContouring {


VoxelModel VoxelModel = new VoxelModel();
int MATERIAL_SOLID = 1;
int MATERIAL_AIR = 0;
List<int> triangles = new List<int>();
byte Node_Internal = 1;
byte Node_Psuedo = 2;
byte Node_Leaf = 3;


public List<int> ContourOctree(OctreeNode node){

    if (node==null) {
        Debug.Log ("Now it's null");
    }
    ContourCellProc (node);
    return triangles;
}

到目前为止,我可以访问属性,并且该对象不为null。有问题的变量“节点”正在传递而没有任何问题。它被传递给同一个类中的方法,该方法为null。

void ContourCellProc(OctreeNode node)
{
    if (node == null) // True
    {
        Debug.Log ("It is null");
        return;
    }

现在我无法访问该对象,它是null,我不知道为什么。我没有得到它,它只被传递。问题是什么?

1 个答案:

答案 0 :(得分:0)

检查您的条件 - 意外使用=代替==会导致空对象。

还要注意,给定的代码将在调试行之后传递一个空对象 - 确保您没有错过else语句,并确切知道分支的设计目的。< / p>

这有时可能是多线程访问的结果,如果您正在访问由多个线程访问的对象中包含的对象 - 看到对象是直接传递而不是通过引用传递(ref),情况不太可能如此。