[C#] NullReferenceException - Търся помощ


0
Написах един клас Drawer, чиято работа е да пише по конзолата. В него има метод DrawBrick(), който взима тухличка {цвят,буква, ред, колона} и пише буквата със съответния бакграунд. Този метод е прайвът. Има друг метод DrawInConsole(), който приема матрица от такива тухлички, изцикля я и за всеки от тях вика DrawBrick(). Накрая има и трети DrawMatrixInConsole(), който взима матрица от такива матрици и за всяка от тях вика DrawInConsole().
http://pastebin.com/m1n7ymFn - това е кода на конкретния клас.
Проблемът се случва някъде около 7-мото извикване на DrawInConsole(), измерено на око.
Това което ме фрапира обаче е ето на тази снимка: http://imageshack.com/a/img703/876/smnm.jpg Изглежда според компилатора трябва да инстанцирам инт-а от цикъла с new, което ми се вижда доста абсурдно. Моля обяснете ми какво пропускам.
Бонус въпрос: Случвало ли ви се е от дебъгинга да не сочи към проблема, а на някакво произволно място?


в C# OOP от lokiko91 (790 точки)


Отговори



1
Без целия код на цялото приложение трудно да ти кажа, но element.ElementMatrix виж дали не е null? Сложи breakpoint на метода и при извикването провери.

от ivaylo.kenov (30760 точки)


1

matrix[0, 0].ElementMatrix.GetLength(0);

 това ElementMatrix какво е? Предлолагам нещо от друг клас - тук правиш една от най големите грешки в ООП - съдаваш зависимости между класовете.

Най - вероятно и тук някъде ти е проблема, някоя матрица е null. Методите за рендиране на матрицата, трябва да са си в класа за матрицата.


от wooden_jesus (2128 точки)


0
Има два класа в случая - VisualElement и VisualBrick (което не е точно клас а структ) VisualElement има матрица от тухлички (ElementMatrix) Тухличките самостоятелно са нищо. Само когато са заедно, те са нещо със смисъл - примерно камък, където камъка е 1 визуален елемент.
1-вия метод печата тухла по тухла. 2-рия печата само един визуален елемент. 3-тия печата матрица от визуални елементи.
3 вика 2, който вика 1.
Зависимост има, но не виждам как да я заобиколя.
// Освентова ElementMatrix не е null - сигурно е.

от lokiko91 (790 точки)

0
Наистина нямам време да ти гледам кода, но мога да ти дам съвет, как да си изградиш правилно кода като ООП. От това което казваш, разбирам, че имаш тухли - това задължителнбо трябва да ти е отделен обект, клас. За матрицата, незнам каква ти е идеята като визия, но бих ти предложил да ползваш координатите на конзолата като една матрични координати и в тях просто да рендираш обектите - например тухли. Погледни от миналия ООП курс, Academy Popcorn работилницата - лично аз след този проект, разбрах основните принципи как действат. :)

от wooden_jesus (2128 точки)


1

На картинката се вижда  element или element.ElementMatrix == null.  Дебъгера  е на частта, оградена в жълто, не на 'int r = 0'. Разгледай как попълваш VisualElement[,] matrix преди да го подадеш на DrawMatrixInConsole.


от Stefanpu (404 точки)


0
Благодаря. Ще го направя, а после ще си фрасна главата в стената, задето съм изпуснал нещо такова.

от lokiko91 (790 точки)