2009-09-24 8 views
4

Je suis en train de convertir ce code C# en C++/code cli:Comment implémenter IEnumerable <int> à partir de ce code C#?

class MyRange : IEnumerable<int> 
{ 
    public IEnumerator<int> GetEnumerator() { return null; } 

    IEnumerator IEnumerable.GetEnumerator() { return null; } 
} 

Voici ma tentative:

namespace Tests { 
    public ref class MyRange : System::Collections::Generic::IEnumerable<int> { 
    private: 
     virtual System::Collections::IEnumerator^ GetEnumerator() = System::Collections::IEnumerable::GetEnumerator { 
      return nullptr; 
     } 

     virtual System::Collections::Generic::IEnumerable<int>^ GetEnumerator() { 
      return nullptr; 
     } 
    }; 
} 

Il me donne tant d'erreurs (comme 20), que je don Je pense même que ça vaut la peine de les mettre ici. Je l'ai googlé tout et il semble que beaucoup de gens ont le même problème que moi.

+0

Vous pouvez essayer de le compiler et l'exécuter à travers réflecteur, puis de passer la langue. Par curiosité, quel est l'intérêt de passer du C# au C++? – TrueWill

+0

Je l'ai essayé. Le résultat du réflecteur ne fonctionne pas :( –

+0

Comme C++/CLI ne supporte pas le retour de rendement, j'ai besoin d'implémenter manuellement IEnumerable/IEnumerator Je ne suis pas en train de passer de C# à C++/cli/cli pour voir comment ça marche –

Répondre

4

Ok, après beaucoup de combats a trouvé un code de travail:

namespace Tests { 
    ref class MyCollection : public Generic::IEnumerable<int> 
    { 
    public: 
     virtual System::Collections::IEnumerator^ GetEnumeratorNonGeneric() = System::Collections::IEnumerable::GetEnumerator 
     { 
      return GetEnumerator(); 
     } 

     virtual Generic::IEnumerator<int>^ MyCollection::GetEnumerator() 
     { 
      return nullptr; 
     } 
    }; 
} 
2

Il est souvent utile de désassembler votre C# dans Reflector en utilisant C++ managé comme langue cible, puis de faire la traduction en C++/CLI.

+0

Le code du réflecteur ne fonctionne pas :( –

Questions connexes