イテレータは「.net の方法」に正確に変換できるわけではありませんが、大まかに IEnumerable < T > と IEnumerator < T > に置き換えられます。
それよりも
vector<int> a_vector;
vector<int>::iterator a_iterator;
for(int i= 0; i < 100; i++)
{
a_vector.push_back(i);
}
int total = 0;
a_iterator = a_vector.begin();
while( a_iterator != a_vector.end() ) {
total += *a_iterator;
a_iterator++;
}
あなたが見るでしょう(C#で)
List<int> a_list = new List<int>();
for(int i=0; i < 100; i++)
{
a_list.Add(i);
}
int total = 0;
foreach( int item in a_list)
{
total += item;
}
または、より明示的に (IEnumerator を foreach 構文シュガーの背後に隠すことなく):
List<int> a_list = new List<int>();
for (int i = 0; i < 100; i++)
{
a_list.Add(i);
}
int total = 0;
IEnumerator<int> a_enumerator = a_list.GetEnumerator();
while (a_enumerator.MoveNext())
{
total += a_enumerator.Current;
}
ご覧のとおり、foreach は .net 列挙子を隠しているだけです。
つまり、「.net の方法」とは、人々が List< Local > アイテムを自分で作成できるようにすることです。繰り返しを制御したり、コレクションをもう少しカスタマイズしたい場合は、コレクションに IEnumerable< T > や ICollection< T > インターフェイスを実装させます。
C# へのほぼ直接的な翻訳は、あなたが想定したものとほぼ同じです。
public class Native
{
public class Local
{
public string m_str;
public int m_int;
}
private List<Local> m_Locals = new List<Local>();
public List<Local> Locals
{
get{ return m_Locals;}
}
}
その後、ユーザーは次のことができるようになります
foreach( Local item in someNative.Locals)
{
...
}