c# - 范围有问题?“你调用的对象是空的 ”
问题描述
我正在尝试构建一个 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# 对我来说是新的!
解决方案
请做:
private List<float[]> _simpleSpectrum = new List<float>();
或者,如果您需要在课堂外访问它:
public List<float[]> SimpleSpectrum { get; set; }
这样,它将 a) 工作并且 b) 与标准 C# 命名约定保持一致
传递给另一个浮点数组“simpleSpectrum”
小心使用“数组”和“列表”这两个词——如果你这么说,其他开发人员专业人士会期望你真的真正使用这些东西。SimpleSpectrum 是一个列表,而不是一个数组。如果您坚持认为它是一个数组,然后显示一些您在其上调用 Add 方法的代码,那么 C# 开发人员会非常困惑
推荐阅读
- reactjs - 反应:模块解析失败
- java - 如何将活动背景重置为主题默认值
- laravel - Laravel 存储链接不与公共链接
- python - postman python代码生成不添加配置参数
- php - PHP正则表达式检查长度而不使用前瞻
- javascript - javascript的默认导出代码在tailwindcss中不起作用
- python - kmeans 与其他变量的散点图
- javascript - 如何从获取数据响应中构造新的 JSON?
- reactjs - 使用 Authentication 标头的基于令牌的身份验证给出 403 禁止错误
- php - 如何绕过在奇怪时区拥有 mySQL 数据库的主机