Почему я не могу добавить объект в свой список в C #? - PullRequest
1 голос
/ 03 декабря 2010

Следующие результаты приводят к исключению NullReferenceException. Это говорит мне, что "drawObjs.Add (drawObj);" - В экземпляре объекта не задана ссылка на объект. Я не понимаю, почему это не установлено для экземпляра?

Список:

List<drawObject> drawObjs;

Метод, который добавляет в список:

public void createDrawObj()
        {

            drawObject drawObj = new drawObject(100,100,100,100,10);

            drawObjs.Add(drawObj);

        } 

И сам класс:

class drawObject
    {

        float _posX;
        float _posY;
        float _sizeX;
        float _sizeY;
        float _cr;

        public drawObject(float posX, float posY, float sizeX, float sizeY, float cr)
        {

            _posX = posX;
            _posY = posY;
            _sizeX = sizeX;
            _sizeY = sizeY;

        }

        public GraphicsPath objPath() 
        {

            GraphicsPath Path = new GraphicsPath();

            Path.AddLine(_posX + _cr, _posY, _posX + _sizeX - (_cr * 2), _posY);
            Path.AddArc(_posX + _sizeX - (_cr * 2), _posY, _cr * 2, _cr * 2, 270, 90);
            Path.AddLine(_posX + _sizeX, _posY + _cr, _posX + _sizeX, _posY + _sizeY - (_cr * 2));
            Path.AddArc(_posX + _sizeX - (_cr * 2), _posY + _sizeY - (_cr * 2), _cr * 2, _cr * 2, 0, 90);
            Path.AddLine(_posX + _sizeX - (_cr * 2), _posY + _sizeY, _posX + _cr, _posY + _sizeY);
            Path.AddArc(_posX, _posY + _sizeY - (_cr * 2), _cr * 2, _cr * 2, 90, 90);
            Path.AddLine(_posX, _posY + _sizeY - (_cr * 2), _posX, _posY + _cr);
            Path.AddArc(_posX, _posY, _cr * 2, _cr * 2, 180, 90);

            Path.CloseFigure();

            return Path;

        }

        public LinearGradientBrush objBrush(int objColor)
        {

            LinearGradientBrush lgb;
            if (objColor == 1)
            {
                lgb = new LinearGradientBrush(new PointF(_posX + (_sizeX / 2), _posY), new PointF(_posX + (_sizeX / 2), _posY + _sizeY), Color.RosyBrown, Color.Red);
            }
            else
            {
                lgb = new LinearGradientBrush(new PointF(_posX + (_sizeX / 2), _posY), new PointF(_posX + (_sizeX / 2), _posY + _sizeY), Color.GreenYellow, Color.Green);
            }
            return lgb;

        }

    }

Ответы [ 3 ]

9 голосов
/ 03 декабря 2010

Вам нужно создать экземпляр drawObjs - без него это нулевая ссылка:

List<drawObject> drawObjs = new List<drawObject>();
4 голосов
/ 03 декабря 2010

Создать список:

List<drawObject> drawObjs = List<drawObject>();
0 голосов
/ 03 декабря 2010

Если вы использовали вывод типа, вы с меньшей вероятностью совершите эту ошибку.

var drawObjs = new List<drawObject>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...