2011-12-31 8 views
1

私はC#でそれほど経験がありません。私はすでに以前に何かを求めてきました。 私の古いトピックへのリンクhere しかし、私はこのコードに新しい問題があります。 Visual Studioでは「インスタンス化されたイニシャライザをstructに格納することはできません」と言われていますが、何か問題がありますが、実際にこのことを理解していないので、どうにかしてこの作業を行うことができますか? 私はちょうど行列の配列または配列の配列であるVector3をアンカー型にする必要があります - 何でも4x4 Javaで私はおそらくそれを書くでしょう public Vector3 [] [] = new Vector3 [4] [4];は、構造体のインスタンスフィールドイニシャライザを持つことができません。

これは私の問題のあるコードです:あなたは5つのアレイを持っている時点で

[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

答えて

1

、あなたにもちょうどそのクラスになるかもしれません。それは、より賢明に動作します:

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

+0

@ user1097772固定サイズの配列(固定バッファ)は構造体のバッファに直接*埋め込むために "安全でない"コードを使用する高度な技術です。ハードコアのもの。外側の配列を読み書き可能にすることができます。しかし、ほとんどの場合、それはエラーです。その目的は通常、配列を再割り当てするのではなく、* contents *を変更することです。それはあなたのタイプです - あなたはそうします。私はまた追加する必要があります:ほとんどの時、誰かがC#の新しい構造体を使うとき、それらは不適切かつ間違って使用します。ちょっと言って... –

+0

Thx。 これを行うだけです: Bpatch bpatch = new Bpatch(); bpatch.anchors [0] [1] =新しいVector3(-0.75f、-0.75f、-0.5f); bpatch.anchors [0] [2] =新しいVector3(-0.25f、-0.75f、0.0f); など。 readonly修飾子で可能ですか? 私の最初の意図は、行列4x4としてアンカーを持っていた – user1097772

関連する問題