首页 > 解决方案 > 范围有问题?“你调用的对象是空的 ”

问题描述

我正在尝试构建一个 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<float[]> simpleSpectrum”是在全局范围内创建的。但是 floatArray 应该可以在函数内访问,还是不能访问?

我希望有人能帮助我。C# 对我来说是新的!

标签: c#listunity3darraylistreference

解决方案


请做:

private  List<float[]> _simpleSpectrum = new List<float>();

或者,如果您需要在课堂外访问它:

public List<float[]> SimpleSpectrum { get; set; }

这样,它将 a) 工作并且 b) 与标准 C# 命名约定保持一致

传递给另一个浮点数组“simpleSpectrum”

小心使用“数组”和“列表”这两个词——如果你这么说,其他开发人员专业人士会期望你真的真正使用这些东西。SimpleSpectrum 是一个列表,而不是一个数组。如果您坚持认为它是一个数组,然后显示一些您在其上调用 Add 方法的代码,那么 C# 开发人员会非常困惑


推荐阅读