2011-12-31 74 views
1

我在C#中經驗不足,我習慣在java中工作。我之前已經要求過一些東西,有些人向我提出這樣的建議。 鏈接到我的舊主題here 但我有這個代碼的新問題。 Visual Studio說「我不能在struct中有實例提交初始值設定項」 - 所以有一些問題,但我真的不明白這個東西,所以在某種程度上可能使這個工作? 我只需要錨點類型Vector3,它是矩陣或數組的數組 - 無論4x4 在Java中,我可能會寫它 public Vector3 [] [] = new Vector3 [4] [4];結構中不能有實例字段初始值設定項

這是我的問題的代碼:

[StructLayout(LayoutKind.Sequential)] 
    struct BPatch 
    { 
     public Vector3[][] anchors = new Vector3[][] {new Vector3[4],new Vector3[4],new Vector3[4],new Vector3[4]}; 
     public uint dlBPatch;// Display list 
     public uint texture;// Texture 
    } 
+0

[「無法在結構中有實例字段初始值設定項」問題](http://stackoverflow.com/questions/4406178/cannot-have-instance-field-initializers-in-structs-problem) – nawfal 2013-04-15 10:42:29

回答

1

通過你有5個陣列的時候,你可能也只是使它成爲一個類。它會表現得比較理智:

class BPatch 
{ 
    private readonly Vector3[][] anchors = new Vector3[][] {new Vector3[4],new Vector3[4],new Vector3[4],new Vector3[4]}; 
    public Vector3[][] Anchors { get { return anchors; } } 
    public uint DlBPatch {get;set;} 
    public uint Texture {get;set;} 
} 

如果你有很好的理由微優化,「固定的」陣列(而不是一個交錯數組)可能是有趣的。

+0

而且如果我還需要設置錨點? 你爲什麼只用readonly? 我真的沒有太多的理解固定和鋸齒陣列之間的區別。我發現鋸齒陣列是數組的數組 - 只有我知道。 – user1097772 2011-12-31 19:41:34

+0

@ user1097772固定大小的數組(固定緩衝區)是使用「不安全」代碼在結構中直接嵌入緩衝區*的結構中的高級技術。鐵桿的東西。你可以讓外部數組讀寫。但在大多數情況下,這是一個錯誤;意圖通常是改變*內容*,而不是重新分配數組。這是你的類型 - 按你的意願去做。我還應該補充說:大多數情況下,當新來的c#用戶使用struct時,他們都會不恰當地和錯誤地使用它。只是說... – 2011-12-31 19:47:49

+0

Thx。 我只需要這樣做: Bpatch bpatch = new Bpatch(); bpatch.anchors [0] [1] = new Vector3(-0.75f,-0.75f,-0.5f); bpatch.anchors [0] [2] = new Vector3(-0.25f,-0.75f,0.0f); 等.. 只讀限定符可能嗎? 我的第一個意圖是錨定矩陣4x4 – user1097772 2011-12-31 20:19:16

相關問題