2012-06-05 58 views
0
string downloadedString = "0;0;0;2610;-1515;15;4;0;0;none;0;0;Torran|1;0;2;-3616;-3729;790;212;519;513;OA-4620;3405;4160;Jzeero|"; 

string[] parts = downloadedString.Split('|'); 
string[][] users = new string[parts.Length-1][]; 

for (int i = 0; i < parts.Length-1; i++) 
{ 
    string[] test = parts[i].Split(';'); 
    users[i][12] = test[12]; 
} 

我有此代码,其将字符串,然后尝试存储成阵列..对象引用不设置为一个对象的一个​​实例在C#

当编译,一旦程序到达下面的行:

users[i][12] = test[12]; 

Visual C#中会告诉我下面的:

NullReferenceException是未处理:对象不是S et到一个对象的一个​​实例。

这是为什么?虽然知道C#它真的很烦人,我唯一的朋友不知道任何

回答

0

您必须分配内部数组

for (int i = 0; i < parts.Length - 1; i++) 
      { 
       string[] test = parts[i].Split(';'); 
       users[i] = new string[] { test[12] }; 
      } 
0

您没有设置项的值中的第一维数组so users[i]为空,因此尝试访问users[i][12]将导致NullReferenceException。

+1

否例的样品:P 450 – Jay

2

users[0](或用户[1] ...)没有数组,所以[12]users[i][12]正在尝试索引不存在的数组。
更换

users[i][12] = test[12]; 

users[i] = test; 

将分配由分割创建整个新阵列user[i],然后你可以做users[i][12]得到数组的最后一个元素。

希望这有助于

0

您使用的是jagged array(字符串[] [])
在你的循环youre设法访问用户的[I] [12],但你永远不初始化数组的任何索引在用户内部,如此自然地尝试获取/设置其中的项目填充失败。


在简单的话,你需要做的是正确初始化乌尔锯齿状排列,在所提供的链接

0

MSDN

所引发的异常解释时,有一个尝试解引用 空对象引用。

for (int i = 0; i < parts.Length-1; i++) 
{ 
    string[] test = parts[i].Split(';'); 
    string[] thatUser = users[i]; // thatUser is null 
    //the array access against the null reference 
    // causes an exception. 
    string thatString = thatUser[12]; 
} 
0

NullReferenceException是告诉你的运行时间的方式“我试图去引用一个对象的引用,但引用设置到null”。我可以同情你的烦恼,因为这是一个非常令人沮丧的例外,因为它不告诉你参考哪个。

诊断问题的最简单方法是使用调试器。您可以使用它来检查应用程序执行时的所有变量。 Visual Studio将在它引发的位置捕获异常,并让您检查范围中所有字段的状态,以便查看其中哪些值包含null值。

为了帮助您缩小范围,每次使用.字符访问实例的某些属性或方法(非静态)时都会发生取消引用。当抛出异常时,检查.的左侧为null

0

尝试以下

string downloadedString = "0;0;0;2610;-1515;15;4;0;0;none;0;0;Torran|1;0;2;-3616;-3729;790;212;519;513;OA-4620;3405;4160;Jzeero|"; 

      string[] parts = downloadedString.Split('|'); 
      string[,] users; 

      for (int i = 0; i < parts.Length - 1; i++) 
      { 
       string[] test = parts[i].Split(';'); 
       users = new string[parts.Length - 1,test.Length]; 
       users[i,12] = test[12]; 
      } 
相关问题