C#语言有很多值得学习的地方,这里我们主要介绍C# Employee对象,包括介绍所有雇员数据的命令等方面。

C# Employee对象
本文用代码片断演示了怎样获取C# Employee对象的所有内容,包括ACME_DIVISION字典中的部门经理的名字。如果有时间的话,请阅读一下其中的代码来看看它是怎么使用的。它可以被直接放到你的类中并可以运行。命令的名字是PRINTOUTEMPLOYEE。ListEmployee()函数接收一个ObjectId参数,它通过一个ref类型的字符串数组返回值(包含相应的雇员数据)。调用它的PrintoutEmployee()函数只是用来在命令行中输出这些数据。
我们需要一个遍历并显示所有雇员数据的命令。
- public static void ListEmployee(ObjectId employeeId, ref string[] saEmployeeList)
 - {
 - int nEmployeeDataCount = 0;
 - Database db = HostApplicationServices.WorkingDatabase;
 - Transaction trans = db.TransactionManager.StartTransaction(); //开始事务处理。
 - try
 - {
 - Entity ent = (Entity)trans.GetObject(employeeId, OpenMode.ForRead, false);
 - //打开当前对象!
 - if (ent.GetType() == typeof(BlockReference))
 - {
 - //不是所有的块索引都有雇员数据,所以我们要处理错误
 - bool bHasOurDict = true;
 - Xrecord EmployeeXRec = null;
 - try{
 - BlockReference br = (BlockReference)ent;
 - DBDictionary extDict = (DBDictionary)trans.GetObject
 
(br.ExtensionDictionary, OpenMode.ForRead, false);- EmployeeXRec = (Xrecord)trans.GetObject(extDict.GetAt("EmployeeData"),
 
OpenMode.ForRead, false);- }
 - catch
 - {
 - bHasOurDict = false; //出现了错误……字典或扩展记录不能访问
 - }
 - if (bHasOurDict) //如果获得扩展字典,而又有扩展记录……
 - {
 - // 为雇员列表分配内存
 - saEmployeeList = new String[4];
 - //加入雇员的名字
 - TypedValue resBuf = EmployeeXRec.Data.AsArray()[0];
 - saEmployeeList.SetValue(string.Format("{0}\n", resBuf.Value),
 
nEmployeeDataCount);- nEmployeeDataCount += 1;
 - //加入雇员的薪水
 - resBuf = EmployeeXRec.Data.AsArray()[1];
 - saEmployeeList.SetValue(string.Format("{0}\n", resBuf.Value),
 
nEmployeeDataCount);- nEmployeeDataCount += 1;
 - //加入雇员所在的部门
 - resBuf = EmployeeXRec.Data.AsArray()[2];
 - string str = (string)resBuf.Value;
 - saEmployeeList.SetValue(string.Format("{0}\n", resBuf.Value),
 
nEmployeeDataCount);- nEmployeeDataCount += 1;
 - //现在,让我们从公司字典中获取老板的名字
 - //在NOD中找到.
 - DBDictionary NOD = (DBDictionary)trans.GetObject(db.NamedObjectsDictionaryId,
 
OpenMode.ForRead, false);- DBDictionary acmeDict = (DBDictionary)trans.GetObject(NOD.GetAt("ACME_DIVISION"),
 
OpenMode.ForRead);- //注意我们直接使用扩展数据...
 - DBDictionary salesDict = (DBDictionary)trans.GetObject(acmeDict.GetAt
 
((string)EmployeeXRec.Data.AsArray()[2].Value),OpenMode.ForRead);- Xrecord salesXRec = (Xrecord)trans.GetObject(salesDict.GetAt("Department Manager"),
 
OpenMode.ForRead);- //***,把雇员的数据输出到命令行
 - resBuf = salesXRec.Data.AsArray()[0];
 - saEmployeeList.SetValue(string.Format("{0}\n", resBuf.Value), nEmployeeDataCount);
 - nEmployeeDataCount += 1;
 - }
 - }
 - trans.Commit();
 - }
 - finally
 - {
 - trans.Dispose();
 - }
 - }
 - [CommandMethod("PRINTOUTEMPLOYEE")]
 - public static void PrintoutEmployee()
 - {
 - Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
 - //声明我们将在下面使用的工具...
 - Database db = HostApplicationServices.WorkingDatabase;
 - Transaction trans = db.TransactionManager.StartTransaction();
 - try
 - {
 - //首先,获取块表和模型空间块表记录
 - BlockTable bt = (BlockTable)trans.GetObject(HostApplicationServices.
 
WorkingDatabase.BlockTableId, OpenMode.ForRead);- BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace],
 
OpenMode.ForRead);- //现在,我们需要把内容输出到命令行。这里可以有一个对象帮助我们:
 - //下面的部分,我们将遍历模型空间:
 - foreach (ObjectId id in btr)
 - {
 - Entity ent = (Entity)trans.GetObject(id, OpenMode.ForRead, false); //打开当前对象!
 - if (ent is BlockReference)
 - {
 - string[] saEmployeeList = null;// 这是正确的...定义新的列表。
 - ListEmployee(id, ref saEmployeeList);
 - if ((saEmployeeList.Length == 4))
 - {
 - ed.WriteMessage("Employee Name: {0}", saEmployeeList[0]);
 - ed.WriteMessage("Employee Salary: {0}", saEmployeeList[1]);
 - ed.WriteMessage("Employee Division: {0}", saEmployeeList[2]);
 - ed.WriteMessage("Division Manager: {0}", saEmployeeList[3]);
 - }
 - }
 - }
 - }
 - finally
 - {
 - }
 - }
 
【编辑推荐】
                网站栏目:C#Employee对象浅谈
                
                浏览路径:http://www.csdahua.cn/qtweb/news42/376942.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网