2009-05-26 7 views
2

Je veux convertir un tableau de struct en tableau de Point3D. L'extrait de code est le suivant:Comment puis-je convertir d'un tableau de struct en tableau de Point3D?

classe Mymesh { MeshGeometry3D publics Mesh3D // Propriétés 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); 
    } 
. 
. 

}

Ce code est produit le message d'erreur « Impossible de convertir 'Mymesh.mystruct' to'System.Windows.Media.Media3D.Point3D ».

Comment Je corriger cette erreur?

Merci à l'avance.

Onder YILMAZ

Répondre

1

Pour pouvoir construire un Point3D, vous devez utiliser l'un de ses constructeurs.
De this documentation il semble que Point3D a un constructeur qui prend les 3 coordonnées afin que vous pouvez modifier ceci:

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

à ceci:

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

Vous pouvez également remarquer que vous avez tout à fait une quelques erreurs de syntaxe dans cet extrait de code. Par exemple, indexer un tableau est fait avec [] et non () et quand vous ouvrez une parenthèse, vous devriez toujours le fermer.

0

Il y a plusieurs façons de le faire:

  1. Ne pas utiliser struct personnalisé, utilisez Point3D pour commencer
  2. Définir une distribution explicite ou implicite de votre struct, pour lancer/convertir en un Point3D
  3. Ajouter une méthode ToPoint3D à votre struct
  4. Il suffit d'appeler la méthode .Add avec les i, les membres struct j et k

Je vais montrer la troisième option ici:

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

vous suffit d'appeler cette méthode lors de l'ajout:

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

Notez également que vous devriez probablement utiliser une boucle ici:

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

Notez également les éléments suivants:

  • Vous Vous devriez éviter d'avoir des membres de structure nommés i, j et k, sauf si vous spécifiez des registres de boucle internes.Essayez d'utiliser X, Y et Z à la place, tels qu'ils sont universellement compris comme des valeurs de coordonnées
  • tableaux en début C# à l'index 0, pas 1
  • Vous utilisez [] pour les éléments du tableau d'indexation, non()
  • Vous Il manque une parenthèse de fin dans votre code

Pourquoi est-ce que je le mentionne? Parce qu'il est évident pour moi que le code que vous avez publié n'est pas le code que vous essayez de compiler ou d'exécuter. N'essayez jamais de simplifier le code en le réécrivant. Au lieu de cela, faites un programme court, mais complet, compilable et testable, et postez le code à cela. Laissez-nous nous inquiéter de la surcharge (bien sûr, ne postez pas 1000 lignes, mais réduisez-le à 10-20).

0

Merci à vous tous et Désolé en raison de mon petit nombre d'extraits de code erronés. Le code d'origine est très long. Je ne pouvais pas tous les écrire. Le code d'origine n'a aucune erreur de syntaxe.

Merci encore.

Oner YILMAZ

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

Si vous voulez utiliser votre « mystruct » transparente comme si elle est un Point3D (par exemple, vous souhaitez modifier les coordonnées à l'intérieur d'une méthode), vous devriez écrire un 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 
} 

Je dois dire que je n'ai pas testé ce code et je ne suis pas tout à fait sûr si je peux passer une struct byref ou remplacer les méthodes de struct .. :)

Questions connexes