2014-11-03 47 views
0

我想将值设置为我的结构编写的C#和我得到一个错误。用两个级别数组c填充复杂结构#

private struct pack2 
    { 
     public float var; 
     public float [3]var2; 
    } 
    private struct pack 
    { 
     public pack2[] ster; 
    } 

private void recv() 
{ 
    pack mystruct; 
    mystruct.ster = new pack2[4]; // Because I need to declare 4 structures of pack2 
    mystruct.ster[0].var = 2F; 
    mystruct.ster[0].var[0] = 1F; // error 
} 

错误:NullReferenceException异常是未处理的,ADDINFO:对象引用不设置到对象

我怎么能解决这个问题的一个实例?

解决:

private struct pack2 
     { 
      public float var; 
      public float [3]var2; 
     } 
     private struct pack 
     { 
      public pack2[] ster; 
     } 

    private void recv() 
    { 
     pack mystruct; 
     mystruct.ster = new pack2[4]; // Because I need to declare 4 structures of pack2 
     mystruct.ster[0].var = 2F; 
     mystruct.ster[0].var2 = new float[3]; // Because I need 3 floats on each pack2 
     mystruct.ster[1].var2 = new float[3]; // Because I need 3 floats on each pack2 
     mystruct.ster[2].var2 = new float[3]; // Because I need 3 floats on each pack2 
     mystruct.ster[3].var2 = new float[3]; // Because I need 3 floats on each pack2 
     mystruct.ster[0].var2[0] = 1F; 
     mystruct.ster[0].var2[1] = 1F; 
     mystruct.ster[0].var2[2] = 1F; 
    } 

我希望这将是有用的人。感谢alex

+4

可变的结构是邪恶的。那些应该是阶级。 – SLaks 2014-11-03 03:59:16

+0

我想回应SLaks所说的,并提供Microsoft的这种官方指导:[在类和结构之间选择](http://msdn.microsoft.com/en-us/library/ms229017.aspx) – 2014-11-03 04:02:14

回答

3

您需要初始化数组。

// One instance 
ster = new pack2[1]; 

你可以找到更多关于数组here的信息。

结构在实际代码中很少用到。大多数时候你应该使用课堂。

请参阅此answer何时使用结构(很少)。

+0

It works thank you ,我应该如何实例变种2,因为我有同样的错误,我不能实例。谢谢 – Javi 2014-11-03 04:28:40

+0

方括号中的数字决定了创建期间数组的大小。如果你想持有pack2的两个实例,那么你需要把它改成'pack2 [2]'等等。 – 2014-11-03 05:08:31