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
{
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.
- 92.
- 93.
- 94.
- 95.
- 96.
- 97.
- 98.
- 99.
- 100.
- 101.
- 102.
- 103.
- 104.
- 105.
- 106.
- 107.
【编辑推荐】