2009-05-26 3 views
2

Ich möchte ein Array von Struktur in Array von Point3D konvertieren. Der Code-Snippet ist wie folgt:Wie kann ich von einem Array von Struct zu Array von Point3D konvertieren?

Klasse Mymesh { public MeshGeometry3D Mesh3D // Eigenschaften tanimlaniyor { get {return GetMesh3D(); }}

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); 
    } 
. 
. 

}

Dieser Code die Fehlermeldung „von 'Mymesh.mystruct' Kann nicht konvertieren produziert to'System.Windows.Media.Media3D.Point3D‘.

Wie kann ich überwinden diesen Fehler?

Vielen Dank im Voraus.

Onder YILMAZ

Antwort

1

Um einen Point3D konstruieren zu können, müssen Sie einen seiner Konstruktoren verwenden.
Von this documentation es scheint, dass Point3D einen Konstruktor hat, der die drei Koordinaten nimmt, so dass Sie diese ändern können:

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

dazu:

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

Vielleicht haben Sie auch, dass Sie recht haben bemerken wollen einige Syntaxfehler in diesem Codeschnipsel. Das Indexieren eines Arrays erfolgt beispielsweise mit [] und nicht mit (). Wenn Sie eine Klammer öffnen, sollten Sie sie immer schließen.

0

ist es mehrere Möglichkeiten, dies zu tun:

  1. keine benutzerdefinierte Struktur Verwenden Sie, Point3D verwenden mit
  2. definieren eine explizite oder implizite Besetzung für Ihre Struktur zu beginnen, zu werfen/wandeln es in ein Point3D
  3. hinzufügen ToPoint3D Methode Ihre struct
  4. rufen Sie einfach die .Add Verfahren mit den i, j und k struct Mitglieder

Ich werde die dritte Möglichkeit zeigen, hier:

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

dann rufen Sie einfach diese Methode bei der Zugabe:

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

Beachten Sie auch, dass Sie wahrscheinlich eine Schleife hier verwendet werden soll:

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

beachten Sie auch folgende:

  • Sie sollte versuchen, struct-Member mit dem Namen i, j und k zu vermeiden, es sei denn, Sie geben interne Loop-Register an.Versuchen Sie es mit X, Y und Z statt, da sie universell Werte zu verstehen sind Koordinaten
  • Arrays in C# Start bei Index 0, nicht mehr als 1
  • Sie [] zum Indexieren von Array-Elementen, nicht()
  • Sie fehlen einige Endklammer in Ihrem Code

Warum erwähne ich das? Weil es für mich offensichtlich ist, dass der von Ihnen gepostete Code nicht der Code ist, den Sie zu kompilieren oder auszuführen versuchen. Versuchen Sie niemals, den Code zu vereinfachen, indem Sie ihn umschreiben. Erstellen Sie stattdessen ein kurzes, aber vollständiges, kompilierbares und testbares Programm, und schreiben Sie den Code darauf hin. Machen wir uns Gedanken über Überlastung (notieren Sie nicht 1000 Zeilen, sondern reduzieren Sie sie auf 10-20).

0

Dank Ihnen allen und Entschuldigung wegen meiner wenigen und fehlerhaften Codeschnipsel. Der ursprüngliche Code ist sehr lang. Ich konnte nicht alle schreiben. Der ursprüngliche Code hat keinen Syntaxfehler.

Nochmals vielen Dank.

Öner YILMAZ

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

Wenn Sie Ihre „mystruct“ transparent verwenden, als ob es ein Point3D (zB Sie Koordinaten innerhalb einer Methode ändern möchten) würden Sie haben eine adapter schreiben:

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 
} 

ich muss sagen, dass ich nicht diesen Code testen habe, und ich bin mir nicht ganz sicher, ob ich eine Struktur byref oder außer Kraft setzen struct Methoden übergeben kann .. :)

Verwandte Themen