2009-09-24 137 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