2014-11-03 86 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