C # - Должно быть недоразумение что-то о статических - PullRequest
0 голосов
/ 30 апреля 2011

получил эту маленькую строчку кода.когда я запускаю его, я получаю «Ссылка на объект не установлена ​​на экземпляр объекта» в строке «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
        }
    }
}
}

Ответы [ 2 ]

5 голосов
/ 30 апреля 2011

Вы не инициализировали статический массив:

Roads_Vertices = new double[Road_Vertices_NodeList.Count,2];

Статический означает, что к нему можно получить доступ без экземпляра типа, к которому он относится, или статических методов внутри него, но не из-за того, что он этого не делает.должны быть инициализированы.

Попытка сказать это по-английски:

Будет Road_Vertices, который будет статическим, и двойной многомерный массив:

static double[,] Roads_Vertices; // declaration

И здесьон настолько велик, насколько это важно:

 Roads_Vertices = new double[Road_Vertices_NodeList.Count,2]; // definition
0 голосов
/ 30 апреля 2011

вам нужно инициализировать Road_Vertices и Road_Segment. вы только объявили их, вы не присвоили значение переменным.

вам нужно сделать что-то вроде:

static double[,] Roads_Vertices=new double[someValue,someOtherValue];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...