明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4057|回复: 4

[符号表] 【求助】如何遍历字典

  [复制链接]
发表于 2010-12-24 09:28:33 | 显示全部楼层 |阅读模式
如何遍历字典,搞不懂

Database db = HostApplicationServices.WorkingDatabase;
Transaction trans = db.TransactionManager.StartTransaction();
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
DBDictionary NOD = (DBDictionary)trans.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForWrite);

foreach (DBDictionary d in NOD) //这里错了
{
。。。
}

错误 1 无法将类型“Autodesk.AutoCAD.DatabaseServices.DBDictionaryEntry”转换为“Autodesk.AutoCAD.DatabaseServices.DBDictionary” C:\Documents and Settings\888888\My Documents\Visual Studio 2008\Projects\Lab1\Lab1\Class1.cs 379 17 Lab1

都定义为DBDictionary 了,怎变成了DBDictionaryEntry?

评分

参与人数 1明经币 +1 收起 理由
3xxx + 1

查看全部评分

发表于 2010-12-24 10:21:36 | 显示全部楼层
保存在字典的是DBDictionaryEntry
DBDictionaryEntry是键值对,即key-objectid
 楼主| 发表于 2010-12-24 10:57:41 | 显示全部楼层
但是我的 d和NOD都定义为DBDictionary啊,foreach不能用了……

我遍历字典的目的是
1.找到键值为“AAAA”的项
2.返回它的 父节点(ID和键值)和兄弟节点(ID和键值)
发表于 2010-12-24 14:00:06 | 显示全部楼层
本帖最后由 lzh741206 于 2010-12-24 14:35 编辑

虽然字典的组织像一个Tree,但它确实不是以Tree的形式储存的
下面的代码是的TlsBasal里关于字典的部分操作,你可以看看
另外,父节点可以通过打开Id后获取实体的OwnerId属性获取
  1.         /// <summary>
  2.         /// 获取子字典
  3.         /// </summary>
  4.         /// <param name="dict">根字典</param>
  5.         /// <param name="createSubDictionary">是否创建子字典</param>
  6.         /// <param name="dictNames">键值列表</param>
  7.         /// <returns></returns>
  8.         public DBDictionary GetSubDictionary(DBDictionary dict, bool createSubDictionary, params string[] dictNames)
  9.         {
  10.             if (createSubDictionary)
  11.             {
  12.                 using (dict.UpgradeOpenAndRun())
  13.                 {
  14.                     dict.TreatElementsAsHard = true;
  15.                 }

  16.                 foreach (string name in dictNames)
  17.                 {
  18.                     if (dict.Contains(name))
  19.                     {
  20.                         dict = GetObject<DBDictionary>(dict.GetAt(name));
  21.                     }
  22.                     else
  23.                     {

  24.                         DBDictionary subDict = new DBDictionary();
  25.                         dict.SetAt(name, subDict);
  26.                         Transaction.AddNewlyCreatedDBObject(subDict, true);
  27.                         dict = subDict;
  28.                         dict.TreatElementsAsHard = true;
  29.                     }
  30.                 }
  31.             }
  32.             else
  33.             {
  34.                 foreach (string name in dictNames)
  35.                 {
  36.                     if (dict.Contains(name))
  37.                     {
  38.                         dict = GetObject<DBDictionary>(dict.GetAt(name));
  39.                     }
  40.                     else
  41.                     {
  42.                         return null;
  43.                     }
  44.                 }
  45.             }

  46.             return dict;

  47.         }
  1.         //保存和获取数据
  2.         #region Value
  3.         /// <summary>
  4.         /// 保存数据到字典
  5.         /// </summary>
  6.         /// <param name="value">数据</param>
  7.         /// <param name="dict">字典</param>
  8.         /// <param name="key">键值</param>
  9.         public void SetToDictionary(DBObject value, DBDictionary dict, string key)
  10.         {
  11.             if (dict.Contains(key))
  12.                 dict.Remove(key);

  13.             dict.SetAt(Transaction, key, value);
  14.         }

  15.         /// <summary>
  16.         /// 从字典中获取数据
  17.         /// </summary>
  18.         /// <param name="dict">字典</param>
  19.         /// <param name="key">键值</param>
  20.         /// <returns>数据</returns>
  21.         public DBObject GetFromDictionary(DBDictionary dict, string key)
  22.         {
  23.             if (dict != null)
  24.             {
  25.                 if (dict.Contains(key))
  26.                 {
  27.                     DBObject obj = GetObject(dict.GetAt(key));
  28.                     return obj;
  29.                 }
  30.             }
  31.             return null;
  32.         }

  33.         /// <summary>
  34.         /// 保存数据到实体字典
  35.         /// </summary>
  36.         /// <param name="value">数据</param>
  37.         /// <param name="obj">图元实体</param>
  38.         /// <param name="keys">键值列表</param>
  39.         public void SetToDictionary(DBObject value, DBObject obj, params string[] keys)
  40.         {
  41.             string key;
  42.             var dictnames = GetDictNames(keys, out key);

  43.             ObjectId id = obj.ExtensionDictionary;
  44.             if (id == ObjectId.Null)
  45.             {
  46.                 using (obj.UpgradeOpenAndRun())
  47.                 {
  48.                     obj.CreateExtensionDictionary();
  49.                 }
  50.                 id = obj.ExtensionDictionary;
  51.             }
  52.             DBDictionary dict = GetSubDictionary(id, true, dictnames);
  53.             SetToDictionary(value, dict, key);
  54.         }

  55.         /// <summary>
  56.         /// 保存数据到命名字典
  57.         /// </summary>
  58.         /// <param name="value">数据</param>
  59.         /// <param name="keys">键值列表</param>
  60.         public void SetToDictionary(DBObject value, params string[] keys)
  61.         {
  62.             string key;
  63.             var dictnames = GetDictNames(keys, out key);
  64.             DBDictionary dict = GetSubDictionary(Database.NamedObjectsDictionaryId, true, dictnames);
  65.             SetToDictionary(value, dict, key);
  66.         }

  67.         /// <summary>
  68.         /// 从对象字典中获取数据
  69.         /// </summary>
  70.         /// <param name="obj">图元实体</param>
  71.         /// <param name="keys">键值列表</param>
  72.         /// <returns>数据</returns>
  73.         public DBObject GetFromDictionary(DBObject obj, params string[] keys)
  74.         {
  75.             string key;
  76.             var dictnames = GetDictNames(keys, out key);
  77.             ObjectId id = obj.ExtensionDictionary;
  78.             DBDictionary dict = GetSubDictionary(id, false, dictnames);
  79.             return GetFromDictionary(dict, key);
  80.         }

  81.         /// <summary>
  82.         /// 从命名字典中获取数据
  83.         /// </summary>
  84.         /// <param name="keys">键值列表</param>
  85.         /// <returns>数据</returns>
  86.         public DBObject GetFromDictionary(params string[] keys)
  87.         {
  88.             string key;
  89.             var dictnames = GetDictNames(keys, out key);
  90.             DBDictionary dict = GetSubDictionary(Database.NamedObjectsDictionaryId, false, dictnames);
  91.             return GetFromDictionary(dict, key);
  92.         }

  93.         #endregion
发表于 2010-12-27 22:27:38 | 显示全部楼层
飞狐兄威武
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 22:25 , Processed in 0.232605 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表