c++ /CLI将ValuePairs复制到单独的Dictionary中
C++/CLI Copy ValuePairs to a seperate Dictionary
首先,我想谈谈我的最后一个问题:https://stackoverflow.com/questions/31823483/c-cli-set-a-property-to-primarykey
所以我得到了这个固定的答案,我没有找到在第一时间。
现在代码看起来像这样:
public: void SetData(Generic::Dictionary<String^,TypeName>^ Dic) {
array<KeyValuePair<String^,TypeName>^>^ TempConv = gcnew array<KeyValuePair<String^, TypeName>^>(Dic->Count);
((Generic::Dictionary<String^, TypeName>^)Dic)->CopyTo(TempConv,0);
TempEntityDic = gcnew Dictionary<String^, TypeName>(Dic);
DataListe = gcnew List<TypeName>();
for each(KeyValuePair<String^,TypeName>^ t in TempConv){
DataListe->Add(t->Value);
}
// Creating Bindable List
BindingDataListe = gcnew BindingList<TypeName>(DataListe);
BindingDataListe->AddingNew += gcnew System::ComponentModel::AddingNewEventHandler(this, &mepla_iso::Visualisation::ListenAnsicht<TypeName>::OnAddingNew);
// Source festlegen
ListenAnsichtGrid->DataSource = BindingDataListe;
// Display the column Name first
ListenAnsichtGrid->Columns["Name"]->DefaultCellStyle->Font = gcnew Drawing::Font(gcnew Drawing::Font("Consolas", 12), Drawing::FontStyle::Bold);
ListenAnsichtGrid->Columns["Name"]->DisplayIndex = 0;
}
我目前遇到的问题是,我的TempEntityDic(临时字典)不是一个临时字典。上面的代码甚至不能正确编译。错误信息:
System::Collections::Generic::ICollection<System::Collections::Generic::KeyValuePair<System::String ^,TypeName>>::CopyTo':
the function template cannot convert parameter 1 from type 'cli::array<System::Collections::Generic::KeyValuePair<System::String ^,TypeName> ^,1> ^
之前我尝试过:
public: void SetData(...){
TempEntityDic = gcnew Dictionary<String^, TypeName>(Dic);
DataListe = gcnew List<TypeName>();
for each(TypeName t in TempEntityDic){
DataListe->Add(t);
[...............]
}
但那里是一样的。每当我改变DataGridView
中的某些内容时,我也会对Dic
(SetData()
中的参数)进行更改。
问题1制作参数"Dic"的副本而不是引用的最佳方法是什么?问题2我如何获得CopyTo()
工作,以便我可以随后将TempConv
中的所有KeyValuePairs
添加到DataListe
中?
谢谢你的帮助。:)
编辑说得清楚一点:最后我想要两本独立的字典。如果需要,我想用第二个覆盖第一个。
编辑2
你好,这里是我的代码再次。我仍在努力使事情运转起来,但就是找不到解决办法。
public: void SetData(Generic::Dictionary<String^,TypeName>^ Dic) {
//HACK: Kopie von Dic erstellen - Keine Reference
array<KeyValuePair<String^,TypeName>>^ TempConv = gcnew array<KeyValuePair<String^, TypeName>>(Dic->Values->Count);
((Generic::IDictionary<String^, TypeName>^)Dic)->CopyTo(TempConv,0);
Dictionary<String^, TypeName>^ TempEntityDic = gcnew Dictionary<String^, TypeName>();
for each(KeyValuePair<String^, TypeName> t in Dic)
TempEntityDic->Add(t.Key,t.Value);
Dic = gcnew Dictionary<String^, TypeName>(TempEntityDic);
DataListe = gcnew List<TypeName>(Dic->Values);
// Creating Bindable List
BindingDataListe = gcnew BindingList<TypeName>(DataListe);
// Source festlegen
ListenAnsichtGrid->DataSource = BindingDataListe;
// Display the column Name
ListenAnsichtGrid->Columns["Name"]->DefaultCellStyle->Font = gcnew Drawing::Font(gcnew Drawing::Font("Consolas", 12), Drawing::FontStyle::Bold);
ListenAnsichtGrid->Columns["Name"]->DisplayIndex = 0;
}
我也在这里尝试,在TempEntityDic中创建一个新的Dic实例,然后以另一种方式复制它,但这根本不起作用。
你能帮帮我吗?我只是不能让它在不引用第一个字典的情况下创建一个单独的字典
字典。CopyTo只复制值,而不是键值对-这似乎是你的错误。使用array<TypeName>^
代替array<KeyValuePair<String^, TypeName>^>^
- 如何在C++中从两个单独的for循环中添加两个数组
- 用C++在单独的头文件中完成函数体
- 类模板的成员功能的定义在单独的TU中完全专业化
- 如何使用单独文件中的派生类访问友元函数对象
- CoInitialize()在单独的线程上崩溃而不返回
- avrogencpp能为模式中的每种类型生成单独的头文件吗
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- 单独定义模板化嵌套类方法的正确语法
- 如何将 2 个类分成单独的 .h 文件并正确设置它们
- C++ 链接到单独的.cpp文件说"multiple definitions"
- 从单独的文件中读取树
- 将字符串拆分为标记,并将标记拆分为两个单独的数组
- C++计算器,不能单独除以 0
- 自 Windows 10 20H1 以来,具有单独线程的多个窗口停止工作
- 当结构位于单独的头文件中时'unregistered datatype'在 QML 中出现Q_GADGET错误
- 通过单独的 tcp 流建立 http 连接
- Cmake:为 C 设置警告级别,并为 MSVC 单独设置C++代码(Visual C++)
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 如何从单独的线程控制 SFML 窗口?
- c++ /CLI将ValuePairs复制到单独的Dictionary中