У меня есть еще один вопрос по управляемому C++ KeyValuePair, где я знаю, что делать на C#, но мне трудно переводить на управляемый C++. Вот код, который делает то, что я хочу делать на C#:
KeyValuePair<String, String> KVP = new KeyValuePair<string, string>("this", "that");
Я отразил это в MC++ и получил следующее:
KeyValuePair<String __gc*, String __gc*> __gc* KVP = (S"this", S"that");
на который я перевожу:
KeyValuePair<String ^, String ^> KVP = (gcnew String("this"), gcnew String("that"));
Из моего предыдущий вопрос я знаю, что KeyValuePair - это тип значения; проблема в том, что это тип значения в C++ и ссылочный тип в C#? Может ли кто-нибудь сказать мне, как установить ключ и значение KeyValuePair из C++?





Это должно сделать это:
KeyValuePair< String ^, String ^> k(gcnew String("Foo"), gcnew String("Bar"));
KeyValuePair - это неизменяемый тип, поэтому вы должны передать все в конструктор, который выглядит так же, как в C#, за исключением того, что вы пишете это так, если объект находится в стеке.
Это тоже сработало, но я не мог принять оба, поэтому проголосовал за вас обоих.
На самом деле это неизменный. Вот сообщение дизайнера, объясняющее, почему connect.microsoft.com/VisualStudio/feedback/…
Перешел на этот как лучший ответ из-за неизменной цитаты
пытаться
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")) ;
Это сработало, но я не понимаю, почему. KeyValuePair - это тип значения?
KeyValuPair не является неизменяемым типом.