填充多维图像数组时出现空引用异常

时间:2013-12-10 13:26:42

标签: c# image visual-studio-2012 multidimensional-array nullreferenceexception

我在Class KartenClass

中创建了Array cardImages
public Image[][][] cardImages = new Image[9][][];

我写了一个名为arrbef()的方法来填充它

public void arrbef()
{ 
    this.cardImages[0][0] = new Image[3] { global::WindowsFormsApplication4.Properties.Resources.Card, global::WindowsFormsApplication4.Properties.Resources.CardBack, global::WindowsFormsApplication4.Properties.Resources.CardSet };
    this.cardImages[0][1] = new Image[3] { global::WindowsFormsApplication4.Properties.Resources.Card, global::WindowsFormsApplication4.Properties.Resources.CardBack, 
etc....

并在我的表单中调用方法arrbef并尝试填充它。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace WindowsFormsApplication4
{
    public partial class Karten : Form
    {
        KartenClass karten = new KartenClass();
        int standort = 0;

        public Karten()
        {
            InitializeComponent();
            KartenClass.karten[0].arrbef();
        }

但是当我点击链接到此表单的按钮时,我收到以下错误:

System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
   bei WindowsFormsApplication4.KartenClass.arrbef() in c:\Users\david.kresse\Documents\Visual Studio 2012\Projects\WindowsFormsApplication5\KartenClass.cs:Zeile 24.
   bei WindowsFormsApplication4.Karten..ctor() in c:\Users\david.kresse\Documents\Visual Studio 2012\Projects\WindowsFormsApplication5\Karten.cs:Zeile 22.
   bei WindowsFormsApplication4.Start.btnStartGoToKarten_Click(Object sender, EventArgs e) in c:\Users\david.kresse\Documents\Visual Studio 2012\Projects\WindowsFormsApplication5\Start.cs:Zeile 394.
   bei System.Windows.Forms.Control.OnClick(EventArgs e)
   bei System.Windows.Forms.Button.OnClick(EventArgs e)
   bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   bei System.Windows.Forms.Control.WndProc(Message& m)
   bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
   bei System.Windows.Forms.Button.WndProc(Message& m)
   bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

我做错了什么?我对另一个阵列做了完全相同的(这是一个尺寸)。

我希望你能提供帮助。

1 个答案:

答案 0 :(得分:1)

此:

public Image[][][] cardImages = new Image[9][][];

...创建一个包含9个元素的顶级数组。每个元素值都为null。你需要:

for (int i = 0; i < cardImages.Length; i++) {
    cardImages[i] = new Image[???][]; // What length do you want?
}

然后,您可以正常填充cardImages[0][0]等。

我个人试图避免使用三维数组(或者在这种情况下是数组数组的数组) - 它可能会变得混乱。但在这种情况下可能是适当的;没有更多信息就很难说。

编辑:有了更多信息,可以将其建模为Category[](或List<Category>),其中CategoryCard[]List<Card> } Card有一个Image[]List<Image>。然后在顶层你只有一组类别。