Condividi tramite


Procedura: Conversione da una raccolta di .NET a un contenitore di STL/CLR

In questo argomento viene illustrato come convertire le raccolte.NET ai relativi contenitori con STL/CLR.Come esempio indicati come convertire un assembly .NET List<T> a uno STL/CLR vettore e come convertire un assembly .NET Dictionary<TKey, TValue> a uno STL/CLR mapping, ma la procedura è simile per tutte le raccolte e contenitori.

Per creare un contenitore da una raccolta

  • Per convertire un'intera raccolta, creare un contenitore STL/CLR e passare la raccolta al costruttore.

    Il primo esempio viene illustrata questa procedura.

-oppure-

  1. Creare un contenitore generico STL/CLR creando un oggetto di collection_adapter .Questa classe modello accetta un'interfaccia di raccolta.NET come argomento.Per verificare le interfacce sono supportate, vedere collection_adapter (STL/CLR).

  2. Copiare il contenuto della libreria .NET al contenitore.Questa operazione può essere eseguita utilizzando uno STL/CLR algoritmo, o mediante scorrere la raccolta di .NET e inserendo la copia di ogni elemento del contenitore STL/CLR.

    Nel secondo esempio viene illustrata questa procedura.

Esempio

In questo esempio, si List<T> generico e aggiunta 5 elementi su.Successivamente, viene creata vector utilizzando il costruttore che accetta IEnumerable<T> come argomento.

// cliext_convert_list_to_vector.cpp
// compile with: /clr

#include <cliext/adapter>
#include <cliext/algorithm>
#include <cliext/vector>

using namespace System;
using namespace System::Collections;
using namespace System::Collections::Generic;

int main(array<System::String ^> ^args)
{
    List<int> ^primeNumbersColl = gcnew List<int>();
    primeNumbersColl->Add(2);
    primeNumbersColl->Add(3);
    primeNumbersColl->Add(5);
    primeNumbersColl->Add(7);
    primeNumbersColl->Add(11);

    cliext::vector<int> ^primeNumbersCont =
        gcnew cliext::vector<int>(primeNumbersColl);

    Console::WriteLine("The contents of the cliext::vector are:");
    cliext::vector<int>::const_iterator it;
    for (it = primeNumbersCont->begin(); it != primeNumbersCont->end(); it++)
    {
        Console::WriteLine(*it);
    }
}
  

In questo esempio, si Dictionary<TKey, TValue> generico e aggiunta 5 elementi su.Successivamente, viene creata collection_adapter per eseguire il wrapping Dictionary<TKey, TValue> come contenitore semplice STL/CLR.Infine, viene creata map e copiamo il contenuto di Dictionary<TKey, TValue> a map scorrendo collection_adapter.Durante questo processo, viene creata una nuova coppia utilizzando la funzione di make_pair e inseriamo la nuova coppia direttamente in map.

// cliext_convert_dictionary_to_map.cpp
// compile with: /clr

#include <cliext/adapter>
#include <cliext/algorithm>
#include <cliext/map>

using namespace System;
using namespace System::Collections;
using namespace System::Collections::Generic;

int main(array<System::String ^> ^args)
{
    System::Collections::Generic::Dictionary<float, int> ^dict =
        gcnew System::Collections::Generic::Dictionary<float, int>();
    dict->Add(42.0, 42);
    dict->Add(13.0, 13);
    dict->Add(74.0, 74);
    dict->Add(22.0, 22);
    dict->Add(0.0, 0);

    cliext::collection_adapter<System::Collections::Generic::IDictionary<float, int>> dictAdapter(dict);
    cliext::map<float, int> aMap;
    for each (KeyValuePair<float, int> ^kvp in dictAdapter)
    {
        cliext::pair<float, int> aPair = cliext::make_pair(kvp->Key, kvp->Value);
        aMap.insert(aPair);
    }

    Console::WriteLine("The contents of the cliext::map are:");
    cliext::map<float, int>::const_iterator it;
    for (it = aMap.begin(); it != aMap.end(); it++)
    {
        Console::WriteLine("Key: {0:F} Value: {1}", it->first, it->second);
    }
}
  

Vedere anche

Attività

Procedura: Conversione da un contenitore di STL/CLR a una raccolta di .NET

Riferimenti

adapter (STL/CLR)

Altre risorse

Riferimenti alla libreria STL/CLR