公共静态成员在公共静态方法中显示为 null

本文关键字:null 显示 静态方法 静态成员 | 更新日期: 2023-09-27 18:33:58

我正在编写一个位于main之外并与公共静态成员交互的方法。我在main()中初始化了成员,并继续尝试在我的方法中使用它,指针为空:

public class Program
{   
    …
    public static EulerPID PitchAxis;
    public static EulerPID RollAxis;
    …   
     public static void FixedUpdateRoutine(object state)
     {  
        …   
        if (…)
        {   
            if (…)
            {   
               …    
                ///Apparently PitchAxis and RollAxis are NULL?
                double[] output = new double[] { PitchAxis.UpdatePID(FloatQs[1]),          RollAxis.UpdatePID(FloatQs[2]) };
                …
             }
          }
        }
    public static void Main() 
    {
      …
      // initialize PID controllers
      EulerPID PitchAxis = new EulerPID(0.0001, 0.001, 0.001);
      EulerPID RollAxis = new EulerPID(0.0001, 0.001, 0.001);
      …
}

帮助?提前感谢!

公共静态成员在公共静态方法中显示为 null

您的主要函数正在做的是创建EulerPID的本地副本。你的主应该是什么样子的:

public static void Main() 
{
  …
  // initialize PID controllers
  PitchAxis = new EulerPID(0.0001, 0.001, 0.001);
  RollAxis = new EulerPID(0.0001, 0.001, 0.001);
  …
}

您正在声明两个与全局变量同名的局部变量。
结果是两个全局变量被局部变量隐藏并且永远不会初始化。
当您尝试在FixedUpdateRoutine中使用它们时,您会得到空引用异常

要初始化全局变量,您需要删除名称前的类型。

PitchAxis = new EulerPID(0.0001, 0.001, 0.001);
RollAxis = new EulerPID(0.0001, 0.001, 0.001);