C# - 必须误解一些关于静态的东西

Gab*_*abe 0 c# static

得到了这一小段代码.当我运行它时,我在"Roads_Vertices [i,0] = Convert.ToDouble(Coordinates [0]);"行上得到"对象引用未设置为对象的实例".救命 !

谢谢加布里埃尔

namespace RouteSim
{
static class Program
{
    static double[,] Roads_Vertices;
    static double[,] Roads_Segments;

    static void Main()
    {
        // Declarations and Initializations
        // Read Roads from XML
        Parse_Road_Data();

        // User Interface
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form_MainWindow());
    }

    static void Parse_Road_Data()
    {
        // Reads and parses the Roads XML file
        XmlDocument Road_File = new XmlDocument();
        Road_File.Load(@"D:\My Documents\Visual Studio 2010\Projects\RouteSim\Additional Data\Roads.xml");

        XmlNodeList Road_Vertices_NodeList = Road_File.GetElementsByTagName("Road_Vertex");
        for (int i = 0; i < Road_Vertices_NodeList.Count; i++)
        {
            string[] Coordinates = Road_Vertices_NodeList[i].InnerText.Split(new Char[] { ' ' });
            Roads_Vertices[i, 0] = Convert.ToDouble(Coordinates[0]);
            Roads_Vertices[i, 1] = Convert.ToDouble(Coordinates[1]);
        }

        XmlNodeList Road_Segments_NodeList = Road_File.GetElementsByTagName("Road_Segment");
        for (int i = 0; i < Road_Segments_NodeList.Count; i++)
        {
            string[] Coordinates = Road_Segments_NodeList[i].InnerText.Split(new Char[] { ' ' });
            Roads_Segments[i, 0] = Convert.ToDouble(Coordinates[0]);
            Roads_Segments[i, 1] = Convert.ToDouble(Coordinates[1]);
            // Readall the rest of the data
        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*mić 5

您没有初始化静态数组:

Roads_Vertices = new double[Road_Vertices_NodeList.Count,2];
Run Code Online (Sandbox Code Playgroud)

静态意味着它可以在没有它所包含的类型的实例的情况下被访问,或者通过其中的静态方法来访问,但不是它不必被初始化.

试着用英语说:

会有一个Road_Vertices是静态的和一个双多维数组:

static double[,] Roads_Vertices; // declaration
Run Code Online (Sandbox Code Playgroud)

在这里,重要的是:

 Roads_Vertices = new double[Road_Vertices_NodeList.Count,2]; // definition
Run Code Online (Sandbox Code Playgroud)