2012-07-19 133 views
0

我收到错误 - NullReferenceException未处理,在下面的代码中。我想从字符串pt中提取字符。不过,我在for循环之外获得了正确的值,但在它内部却不一样。NullReferenceException在c#数组中未处理

ArrayList list = read(); 
int N = Values.N; 
string pt = Values.PlainText; 
MessageBox.Show(""+pt.Length+" "+pt[0]); 
int count = 0; 
char[][][] array = new char[6][][]; 
for(int i=0;i<6;i++) 
{ 
    for(int j=0;j<N;j++) 
    { 
     for(int k=0;k<N;k++) 
     { 
      if (count < pt.Length) 
      { 
       array[i][j][k] = 'r'; 
       //array[i][j][k] = pt[count]; 
       //count++; 
      } 
      else 
      { 
       array[i][j][k] = 'x'; 
      } 
     } 
    } 
} 
+0

你可以阅读这篇文章,进入多维数组了一下: http://msdn.microsoft.com/en-us/library/2yd9wwz4%28v=vs.71%29.aspx – 2012-07-19 13:14:00

+0

我已经读过,我想要输入动态值,但是在这个链接中,所有的例子都是在数组初始化值的帮助下给出的 – Rahul 2012-07-19 13:16:25

回答

7

你必须初始化数组的第二级和第三级,你不能只是分配的元素。所以:

ArrayList list = read(); 
int N = Values.N; 
string pt = Values.PlainText; 
MessageBox.Show(""+pt.Length+" "+pt[0]); 
int count = 0; 
char[][][] array = new char[6][][]; 
for(int i=0;i<6;i++) 
{ 
    for(int j=0;j<N;j++) 
    { 
     array[i] = new char[N][]; // <---- Note 
     for(int k=0;k<N;k++) 
     { 
      array[i][j] = new char[N]; // <---- Note 
      if (count < pt.Length) 
      { 
       array[i][j][k] = 'r'; 
       //array[i][j][k] = pt[count]; 
       //count++; 
      } 
      else 
      { 
       array[i][j][k] = 'x'; 
      } 
     } 
    } 
} 
+0

在我的应用程序中,N将由用户输入,即Array的第二和第三级别,那么我该如何解决这个问题呢? – Rahul 2012-07-19 13:13:37

+0

什么问题?在你循环的时候你知道N,所以通过在你进入循环之前创建尺寸就可以了。虽然如果你需要任意长度的集合,你可以使用List。 – Rup 2012-07-19 13:14:49

+0

就像同样的方法 - 你在变量中的值可能只是在初始化数组的下两个级别时使用它? – 2012-07-19 13:14:52

相关问题