Nasıl yapılır: Bir STL/CLR Kapsayıcısından .NET Koleksiyonuna Dönüştürme
Bu konu, STL/CLR kapsayıcılarının eşdeğer .NET koleksiyonlarına nasıl dönüştürüldüğünü gösterir. Örnek olarak, bir STL/CLR vektörünün .NET'e ICollection<T> nasıl dönüştürüleceğini ve STL/CLR eşlemesinin .NET'e IDictionary<TKey,TValue>nasıl dönüştürüleceğini gösteririz, ancak yordam tüm koleksiyonlar ve kapsayıcılar için benzerdir.
Kapsayıcıdan koleksiyon oluşturmak için
Aşağıdaki yöntemlerden birini kullanın:
Kapsayıcının bir bölümünü dönüştürmek için make_collection işlevini çağırın ve .NET koleksiyonuna kopyalanacak STL/CLR kapsayıcısının başlangıç yineleyicisini ve bitiş yineleyicisini geçirin. Bu işlev şablonu, şablon bağımsız değişkeni olarak bir STL/CLR yineleyicisi alır. İlk örnekte bu yöntem gösterilmektedir.
Kapsayıcının tamamını dönüştürmek için kapsayıcıyı uygun bir .NET koleksiyon arabirimine veya arabirim koleksiyonuna dönüştürün. İkinci örnekte bu yöntem gösterilmektedir.
Örnekler
Bu örnekte bir STL/CLR vector
oluşturacak ve buna 5 öğe ekleyeceğiz. Ardından işlevini çağırarak make_collection
bir .NET koleksiyonu oluştururuz. Son olarak, yeni oluşturulan koleksiyonun içeriğini görüntüleyeceğiz.
// cliext_convert_vector_to_icollection.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/vector>
using namespace cliext;
using namespace System;
using namespace System::Collections::Generic;
int main(array<System::String ^> ^args)
{
cliext::vector<int> primeNumbersCont;
primeNumbersCont.push_back(2);
primeNumbersCont.push_back(3);
primeNumbersCont.push_back(5);
primeNumbersCont.push_back(7);
primeNumbersCont.push_back(11);
System::Collections::Generic::ICollection<int> ^iColl =
make_collection<cliext::vector<int>::iterator>(
primeNumbersCont.begin() + 1,
primeNumbersCont.end() - 1);
Console::WriteLine("The contents of the System::Collections::Generic::ICollection are:");
for each (int i in iColl)
{
Console::WriteLine(i);
}
}
The contents of the System::Collections::Generic::ICollection are:
3
5
7
Bu örnekte bir STL/CLR map
oluşturacak ve buna 5 öğe ekleyeceğiz. Ardından bir .NET oluşturup doğrudan bu .NET'e IDictionary<TKey,TValue> map
atarız. Son olarak, yeni oluşturulan koleksiyonun içeriğini görüntüleyeceğiz.
// cliext_convert_map_to_idictionary.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/map>
using namespace cliext;
using namespace System;
using namespace System::Collections::Generic;
int main(array<System::String ^> ^args)
{
cliext::map<float, int> ^aMap = gcnew cliext::map<float, int>;
aMap->insert(cliext::make_pair<float, int>(42.0, 42));
aMap->insert(cliext::make_pair<float, int>(13.0, 13));
aMap->insert(cliext::make_pair<float, int>(74.0, 74));
aMap->insert(cliext::make_pair<float, int>(22.0, 22));
aMap->insert(cliext::make_pair<float, int>(0.0, 0));
System::Collections::Generic::IDictionary<float, int> ^iDict = aMap;
Console::WriteLine("The contents of the IDictionary are:");
for each (KeyValuePair<float, int> ^kvp in iDict)
{
Console::WriteLine("Key: {0:F} Value: {1}", kvp->Key, kvp->Value);
}
}
The contents of the IDictionary are:
Key: 0.00 Value: 0
Key: 13.00 Value: 13
Key: 22.00 Value: 22
Key: 42.00 Value: 42
Key: 74.00 Value: 74
Ayrıca bkz.
STL/CLR Kitaplık Başvurusu
Nasıl yapılır: Bir .NET Koleksiyonundan STL/CLR Kapsayıcısına Dönüştürme
range_adapter (STL/CLR)