【问题标题】:Strange NullReferenceException that I can't seem to understand我似乎无法理解的奇怪 NullReferenceException
【发布时间】:2014-08-31 14:26:09
【问题描述】:

好吧,让我解释一下自己:

我正在尝试使用带有 Unity 的 SQLite 编写保存/加载保存系统,但在将加载的数据添加到其各自的列表时遇到问题。

问题是,如果我在该方法之外调用此代码,它就可以工作。但我需要它在加载数据时运行。

void AddPaso(string danceName)
{
    for (int i = 0; i < loadedDances.Count; i++)
    {
        if (loadedDances[i].danzaName == danceName)
        {
            try
            {
                Debug.Log(loadedDances.Count);
                loadedDances[i].pasos.Add(paso);
            }
            catch (Exception ex)
            {
                Debug.Log(ex.Message);
            }
        }
    }
}

如果我没有通过所有列表并使用loadedDances[0]而不是[i]添加数据,它会起作用。但我似乎不明白为什么,因为如果我在控制台上打印loadedDances.Count,它实际上说它大于0。

为什么这不起作用?

【问题讨论】:

  • 非常感谢您将异常(尤其是行号)保密。
  • 因为 loadedDances[i].pasos==null -> 它没有引用现有列表。您可能只正确设置了数组中的第一个。
  • 糟糕,给出 NullReferenceException 的行是加载了Dances[i].pasos.Add(paso); 的行。这可能是让我忘记详细说明的挫败感:(

标签: sqlite exception reference null unity3d


【解决方案1】:

显然 loadedDances[i].paso 为空。

你应该把它改成:

void AddPaso(string danceName)
{
    for (int i = 0; i < loadedDances.Count; i++)
    {
        if (loadedDances[i].danzaName == danceName)
        {
            try
            {
               Debug.Log(loadedDances.Count);
               if(loadedDances[i].pasos!=null)
               {
                   loadedDances[i].pasos.Add(paso);
               }
               else
               {
                   Debug.Log ( "loadedDances["+i+"].pasos is not set correctly");
                }

            }
            catch (Exception ex)
            {
                Debug.Log(ex.Message);
            }
        }
    }

}

【讨论】:

  • 确实是问题所在,@Rudolfwm 也是正确的。我修好了,非常感谢!!
猜你喜欢
  • 2023-03-19
  • 2016-09-18
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
  • 2020-04-12
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多