2009-09-24 141 views
4

我想这个C#代码转换成C++/CLI代码:如何从此C#代码实现IEnumerable <int>?

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

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

这里是我的尝试:

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

它给了我这么多的错误(如20),我不要甚至不认为值得把它们放在这里。

我已经使用了这一切,似乎很多人都有与我一样的问题。

+0

你可以尝试编译它,并通过反射运行它,然后切换语言。出于好奇,从C#转到C++的商业案例是什么? – TrueWill 2009-09-24 04:05:35

+0

我试过了。反射器的结果不起作用:( – 2009-09-24 04:23:09

+0

由于C++/CLI不支持yield return,我需要手动实现IEnumerable/IEnumerator。我不是从c#移植到C++/cli,我只是在做一些与C++的互操作/ cli看看它是怎么回事。 – 2009-09-24 04:26:13

回答

4

好了,经过很多战斗发现了一些工作代码:

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

使用托管C++作为目标语言反编译反射器中的C#通常很有帮助,然后从那里进行到C++/CLI的转换。

+0

Reflector's code does not work :( – 2009-09-24 04:23:39