2009-05-26 19 views
2

構造体の配列をPoint3Dの配列に変換したい。 コードスニペットは以下の通りである:構造体の配列をPoint3Dの配列に変換するにはどうすればよいですか?

クラス {公共MeshGeometry3D Mesh3D //プロパティtanimlaniyor {GET {GetMesh3Dを返すMymesh()。 }}

public struct mystruct 
{ 
    public int m_i; 
    public int m_j; 
    public int m_k; 

    public mystruct(int i, int j, int k) 
    { 
      m_i = i; 
      m_j = j; 
      m_i = k; 
    } 
} 

private mystruct[] mypts = 
{ 
    new mystruct(20 , 7 , 7), 
    . 
    . 
    new mystruct(23 , 5 , 7)  
}; 

public MeshGeometry3D GetMesh3D() 
{ 
    mesh.Positions.Add(mypts(1); *// The error is given at just this line.* 
    . 
    . 
    mesh.Positions.Add(mypts(50); 
    } 
. 
. 

}

このコードは、エラーメッセージが「 'Mymesh.mystruct' to'System.Windows.Media.Media3D.Point3D」から変換できません生産している。

どのようにすることができます私はこのエラーを克服する?事前に

感謝。

Onderユルマズ

答えて

1

Point3Dを構築するには、そのコンストラクタの1つを使用する必要があります。

mesh.Positions.Add(mypts[1].m_i, mypts[1].m_j, mypts[1].m_k); 

はまた、あなたはかなり持っていることに注意することが必要になることがあります。これに

mesh.Positions.Add(mypts[1]); 

this documentationから
は、Point3Dのは、あなたがこれを変更することができるように3点の座標を取るコンストラクタを持っているようですこのコードスニペットでは構文エラーはほとんどありません。たとえば、配列のインデックス付けは[]で行われ、()では実行されません。かっこを開いているときは常に閉じてください。

0

これを行うための複数の方法をあります:

  1. /キャストし、あなたの構造体のために明示的または暗黙的なキャストを定義
  2. で開始するたPoint3Dを使うに変換し、カスタム構造体を使用しないでくださいPoint3Dの
  3. 単にI、JとKの構造体のメンバと.Addメソッドを呼び出して、あなたの構造体にToPoint3Dメソッドを追加

私はここで第三のオプションを表示するつもりです:

public Point3D ToPoint3D() 
{ 
    return new Point3D(i, j, k); 
} 

その後、あなたは、単に追加する際に、そのメソッドを呼び出します。

foreach (mystruct p in mypts) 
    mesh.Positions.Add(p.ToPoint3D()); 
を:

public MeshGeometry3D GetMesh3D() 
{ 
    mesh.Positions.Add(mypts[1].ToPoint3D()); 

をまた、あなたはおそらく、ここでループを使用する必要があることに注意してください

はまた、次の点に注意してください。

  • ます内部ループレジスタを指定していない限り、i、j、kという名前の構造体メンバを持つことを避けてください。それらは普遍的、インデックス0であなたはない()
  • ユー、インデクシングアレイ要素の[]を使用しない1
  • をC#の開始における
  • アレイの座標値であると理解されるように、代わりに、X、YおよびZを使用してみてくださいあなたのコードにいくつかの終了括弧がありません

なぜこれについて言及しますか?投稿したコードは、コンパイルまたは実行しようとしているコードではないことは明らかです。コードを書き換えてコードを単純化しようとしないでください。代わりに、短いが完全でコンパイル可能でテスト可能なプログラムを作成し、そのコードを投稿してください。私たちが過負荷を心配しようとしましょう(もちろん、1000行を投稿しないでくださいが、10-20に短縮してください)。

0

ご迷惑をおかけして申し訳ありませんが、私の数少ないコードの誤った部分に起因します。 元のコードは非常に長いです。私はそれらのすべてを書くことができませんでした。 元のコードには構文エラーはありません。

もう一度おねがいします。

Onerユルマズ

0
public Point3D MystructToPoint3D(mystruct point) 
{ 
    return new Point3D(point.m_i, point.m_j, point.m_k); 
} 

あなたはそれが(あなたがメソッド内の座標を変更するなど)Point3Dのだかのように透過的にあなたの「体mystruct」を使用したい場合は、adapterを書く必要があるだろう。

struct Point3DAdapter : Point3D 
{ 
    internal mystruct _point; 

    public Point3DAdapter(ref mystruct point) 
    { 
     this._point = point; 
    } 

    public override double X 
    { 
     get { return _point.m_i; } 
     set { _point.m_i = value; } 
    } 

    // same for Y and Z 
} 

私はこのコードをテストしていないと私はByRefの構造体を渡すか、構造体のメソッドをオーバーライドすることができれば、私は非常にわからないことを言っている.. :)

関連する問題