DynamicObject 类似于键值对
假如现在有一个变量 DynamicObject 对象 dynamicObject ,它有一个 Name 的键
1. DynamicObject 取值
// * 取出来的值是object类型
string name = (string) dynamicObject["Name"];
2. DynamicObject 赋值
string newName = "张三";
dynamicObject["Name"] = newName;
3. DynamicObject 新增键
给 DynamicObject 里不存在的键赋值,sorry 做不了,会报错。
但是可以搞一手 狸猫换太子(我在金蝶里特喜欢用这招)。
思路: 创建一个 DynamicObject 来替换现有的 DynamicObject
DynamicObjectType dynamicObjectType = dynamicObject.DynamicObjectType;
// 在原来的基础上新增一个键
dynamicObjectType.RegisterProperty("ID", typeof(string));
DynamicObject newDynamicObject = new DynamicObject(dynamicObjectType);
newDynamicObject["ID"] = "1234";
// 把原来的键值再赋值新的对象上 可以结合下面 DynamicObject 复制
……
然后再把 newDynamicObject 替换掉 DynamicObject 就行了
既然看到这儿,我想你可能在修改 DynamicObjectCollection 里元素的数据
如果你是要对 DynamicObjectCollection 全部元素,或者一部分元素进行新增键的话
————————————————————————————————————————————————
下面的话对你有用哦
对于 DynamicObjectCollection ,如果添加了一个DynamicObject对象,
这个对象有着 DynamicObjectCollection 里其他元素没有的键,
那么 DynamicObjectCollection 里其他的元素都会添加这个键
举个例子:
DynamicObjectCollection collection;
// 这个collection里的所有的元素的键只有 Name
// 如果执行 collection[0]["ID"] = "123"; 这句,就会报错
DynamicObjectType dynamicObjectType = collection[0].DynamicObjectType;
dynamicObjectType.RegisterProperty("ID", typeof(string));
DynamicObject newDynamicObject = new DynamicObject(dynamicObjectType);
// Add()完成后,collection里全部的元素都会有 ID 这个键,可以打断点看一下
collection.Add(newDynamicObject );
collection.Remove(newDynamicObject );
// 现在再执行这句就没问题,即使 collection.Remove() 了新加的元素
collection[0]["ID"] = "123";
// 这个方法,即不会频繁的操作collection的 Add 和 Remove
// 也不用 狸猫换太子,只是把狸猫放到太子面前溜一圈
// 可谓是十分的方便
————————————————————————————————————————————————
4. DynamicObject 复制
// 这样就创建了一个跟 dynamicObject 一样结构的DynamicObject对象
DynamicObjectType dynamicObjectType = dynamicObject.DynamicObjectType;
DynamicObject newDynamicObject = new DynamicObject(dynamicObjectType );
foreach( DynamicProperty property in dynamicObjectType.Properties){
newDynamicObject[property.Name]=dynamicObject[property.Name];
}
网友评论