首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Unity/Mono DLL -传入函数时变量突然为空

C# Unity/Mono DLL -传入函数时变量突然为空
EN

Stack Overflow用户
提问于 2016-06-24 17:23:43
回答 1查看 281关注 0票数 0

遇到了一个非常奇怪的问题,这个问题没有多大意义。

我们有一个Android正在用Unity3.5编译,我们得到了一个空引用异常,因为在C#上有一个变量是空的。

我们将一个类传递给一个函数,然后在函数中对这个类做一些工作。在将对象传递给函数之前,这是正常的。一旦进入函数内部,它就是null...

只有在非开发模式下构建Unity项目时,才会出现此错误。

有时,我们在函数中添加的null-check实际上会产生null引用异常。这绝对是怪异的。如果出现错误,null检查只会打印到输出日志。如果我们将此null-check放在try catch块中,则不会生成任何异常,并且它会按预期工作。因此,如果try catch块中的值为空,则只需在顶部添加一些调试代码即可打印。

任何帮助都将不胜感激。我不知道代码中还有多少地方可能会发生这样的事情。我必须让它工作的‘修复’真的不是修复,似乎还有其他一些潜在的问题。

(我们传递的类没有任何特殊的重载操作符,等等,这会导致对它进行null检查,从而导致异常或类似的东西)

代码的伪示例:

代码语言:javascript
复制
    void FunctionOne(InputClass myVar)
{

    while (memberStack.Empty() == false)
    {
        var stackPop = memberStack.pop();

        if (myVar == null)
        {
            //At this point the myVar will always be non-null
        }

        FunctionTwo(stackPop, myVar);

    }

}

void FunctionTwo(StackVar stckvar, InputClass myVar)
{

    if (myVar == null)
    {
        //Sometimes though at this point, the myVar will suddenly be null
        //myVar IS NULL
    }

    //DO OTHER WORK

}

InputClass的类定义:

代码语言:javascript
复制
    protected class InputClass
    {
        public bool backup;
        public Stack<STRUCT1> plan;
        public Stack<int> locked;
        public int length;
        public Terminate terminate; //ENUM TYPE
        public HashSet<int> unlocked;
        public List<OBJTYPE1> unassigned;
        public List<OBJTYPE1> damaged;
        public List<OBJTYPE1> replacedObjs;

        public bool IsLocked(OBJTYPE1 subOBJ)
        {
            int compressed = subOBJ.compressed;
            return !unlocked.Contains(compressed) || depLocked.Contains(compressed);
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2016-06-24 17:32:43

由于您将someClassInstance传递给anotherClass.SomeMethod,请尝试以下操作

代码语言:javascript
复制
var localReference = someClassInstance;
if (localReference == null){
  // log it is null before the call
}
anotherClass.SomeMethod(localReference);

如果您碰巧记录了null引用,那么您可能在前面确实忘记了为实例设置一些闭包。然后,您需要跟踪该呼叫。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38009902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档