如何在C#中修复“空引用异常”

时间:2019-08-09 09:33:12

标签: c# nullreferenceexception

我当前正在为事件分配事件处理程序,但是我确实需要传递另一个参数来知道产生此事件的原因。 它具有建立XAML文件的功能。 我做了这样的事情:

chart[i].PaintSurface += (sender, e) => OnCanvasViewPaintSurface(sender, e, i);

但是同一行会引发Null引用异常。

我在网上低头了解原因,在大多数情况下是因为该对象未初始化,但是在这里是。

此处是发生此问题的功能。 数组图表是一个全局变量。

 private void CreateUIElements()
        {
            int MAXCHANNELS = (int)App.UserPrefs[UserPreferenceReference.TotalChannels];
            ChannelLabels = new Label[MAXCHANNELS];
            Plotlayouts = new AbsoluteLayout[MAXCHANNELS];
            for (int i = 0; i < MAXCHANNELS; i++)
            {
                MainGrid.RowDefinitions.Add(new RowDefinition { Height = 15 });
                if (i != MAXCHANNELS - 1)
                {
                    MainGrid.RowDefinitions.Add(new RowDefinition { Height = 75 });
                }
                else
                {
                    MainGrid.RowDefinitions.Add(new RowDefinition { Height = 100 });
                }

                ChannelLabels[i] = new Label()
                {
                    Text = "Channel" + (i + 1),
                    TextColor = Color.Gray
                };
                MainGrid.Children.Add(ChannelLabels[i], 0, 2 * i);

                Plotlayouts[i] = new AbsoluteLayout();
                chart[i] = new SKCanvasView
                {
                    BackgroundColor = Color.White,
                    VerticalOptions = LayoutOptions.FillAndExpand,   // stretch the view
                    HorizontalOptions = LayoutOptions.FillAndExpand, // stretch the view

                    // WidthRequest = 100,  // specify a size
                    // HeightRequest = 100, // specify a size
                };

                chart[i].PaintSurface += (sender, e) => OnCanvasViewPaintSurface(sender, e, i);


                Plotlayouts[i].Children.Add(chart[i], new Rectangle(0, 0, 1, 1), AbsoluteLayoutFlags.All);
                MainGrid.Children.Add(Plotlayouts[i], 0, 2 * i + 1);

            }
            MainGrid.RowDefinitions.Add(new RowDefinition { Height = 50 });

            var buttonLayout = new StackLayout
            {
                Orientation = StackOrientation.Horizontal,
                HorizontalOptions = LayoutOptions.Center
            };

            MainGrid.Children.Add(buttonLayout, 0, MAXCHANNELS);
        }

非常感谢您的帮助。

0 个答案:

没有答案