2011-12-31 161 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

相关问题