遇到了一个非常奇怪的问题,这个问题没有多大意义。
我们有一个Android正在用Unity3.5编译,我们得到了一个空引用异常,因为在C#上有一个变量是空的。
我们将一个类传递给一个函数,然后在函数中对这个类做一些工作。在将对象传递给函数之前,这是正常的。一旦进入函数内部,它就是null...
只有在非开发模式下构建Unity项目时,才会出现此错误。
有时,我们在函数中添加的null-check实际上会产生null引用异常。这绝对是怪异的。如果出现错误,null检查只会打印到输出日志。如果我们将此null-check放在try catch块中,则不会生成任何异常,并且它会按预期工作。因此,如果try catch块中的值为空,则只需在顶部添加一些调试代码即可打印。
任何帮助都将不胜感激。我不知道代码中还有多少地方可能会发生这样的事情。我必须让它工作的‘修复’真的不是修复,似乎还有其他一些潜在的问题。
(我们传递的类没有任何特殊的重载操作符,等等,这会导致对它进行null检查,从而导致异常或类似的东西)
代码的伪示例:
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的类定义:
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);
}
}发布于 2016-06-24 17:32:43
由于您将someClassInstance传递给anotherClass.SomeMethod,请尝试以下操作
var localReference = someClassInstance;
if (localReference == null){
// log it is null before the call
}
anotherClass.SomeMethod(localReference);如果您碰巧记录了null引用,那么您可能在前面确实忘记了为实例设置一些闭包。然后,您需要跟踪该呼叫。
https://stackoverflow.com/questions/38009902
复制相似问题