范围有问题? “对象引用未设置为对象的实例” [重复]
Posted
技术标签:
【中文标题】范围有问题? “对象引用未设置为对象的实例” [重复]【英文标题】:Problem with scopes? "Object reference not set to an instance of an object " [duplicate] 【发布时间】:2021-04-10 17:59:49 【问题描述】:我正在尝试构建 3D Spectograph 并获取给定时间点的一堆频率数据。我需要简化这一点,以便能够处理大量预制件的实例化。所以我使用固定数量的 Rows of fequency 数据来查看:
int spectrumRows = 24;
然后我调用这个函数来“简化”频谱的细节,方法是将值相加,然后将它们的中值添加到一个名为“floatArray”的浮点数组中。然后将其传递给另一个浮点数组“simpleSpectrum”,它告诉我存在此引用错误。
public void addToSimpleSpectrum(float[] spectrum)
float spectralsInRow = spectrum.Length / spectrumRows;
Math.Round(spectralsInRow);
float[] floatArray = new float[(int)spectralsInRow];
for(int i = 0; i < spectralsInRow; i++)
float median = 0f;
float sum = 0f;
for (float o = spectralsInRow*i; o < (spectralsInRow*(i+1)); o++)
sum = sum + spectrum[(int)o];
median = sum / spectralsInRow;
floatArray[i] = median;
simpleSpectrum.Add(floatArray);
我在 Unity 中遇到的错误是:
System.NullReferenceException:对象引用未设置为 [...]:46 处的对象实例
这意味着“simpleSpectrum.Add(floatArray);”不起作用,因为它不知道 floatArray 是什么。 “public List
我希望有人可以帮助我。 C# 对我来说是新的!
【问题讨论】:
Math.Round(spectralsInRow);
是无操作的,因为您没有保存结果。 simpleSpectrum
需要在某处分配值 = new List<float>()
。我建议您阅读作业的工作原理。
这能回答你的问题吗? What is a NullReferenceException, and how do I fix it?
另外,在对spectralsInRow
进行四舍五入后,您可以将其存储在int
中,以节省每次转换的时间
等一下。该错误意味着被引用的对象,即simpleSpectrum
,为空。与floatArray
的值无关。
【参考方案1】:
请做:
private List<float[]> _simpleSpectrum = new List<float>();
或者如果您需要在课堂外访问它:
public List<float[]> SimpleSpectrum get; set;
这样它将 a) 工作并且 b) 与标准 C# 命名约定保持一致
传递给另一个浮点数组“simpleSpectrum”
小心使用“数组”和“列表”这两个词——如果你这么说,其他开发人员专业人士会期望你真的在使用这些东西。 SimpleSpectrum 是一个列表,而不是一个数组。如果您坚持认为它是一个数组,然后显示一些您在其上调用 Add 方法的代码,那么 C# 开发人员会非常困惑
【讨论】:
以上是关于范围有问题? “对象引用未设置为对象的实例” [重复]的主要内容,如果未能解决你的问题,请参考以下文章
MVC 4 - 对象引用未设置为对象的实例。当 POST 动作和索引每一行时