2008-12-05 6 views
4

J'ai encore une autre question C++ KeyValuePair gérée où je sais quoi faire en C#, mais j'ai du mal à traduire en C++ managé. Voici le code qui fait ce que je veux faire en C#:Création d'un KeyValuePair en C++ géré

KeyValuePair<String, String> KVP = new KeyValuePair<string, string>("this", "that"); 

Je l'ai réfléchi dans MC++ et obtenir ceci:

KeyValuePair<String __gc*, String __gc*> __gc* KVP = (S"this", S"that"); 

que je traduis à:

KeyValuePair<String ^, String ^> KVP = (gcnew String("this"), gcnew String("that")); 

Je sais par previous question que KeyValuePair est un type de valeur; est le problème que c'est un type de valeur en C++ et un type de référence en C#? Quelqu'un peut-il me dire comment définir la clé et la valeur d'un KeyValuePair de C++?

Répondre

3

Cela devrait le faire:

KeyValuePair< String ^, String ^> k(gcnew String("Foo"), gcnew String("Bar"));

KeyValuePair est un type immuable, donc vous devez passer tout au constructeur, qui semble la même que dans C#, à l'exception que vous écrivez comme ça si le l'objet est sur la pile.

+0

KeyValuPair est pas un type immuable. –

+0

Cela a également fonctionné, mais je ne pouvais pas accepter les deux, alors je vous ai voté tous les deux. – brian

+0

En fait, c'est immuable. Voici un post par le concepteur expliquant pourquoi https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=90998 –

1

essayer

System::Collections::Generic::KeyValuePair< System::String^, System::String^>^ k = gcnew System::Collections::Generic::KeyValuePair< System::String^, System::String^>(gcnew System::String("foo") ,gcnew System::String("bar")) ; 
+0

Cela a fonctionné, mais je suis confus quant à pourquoi. KeyValuePair est-il un type de valeur? – brian