这篇文章给大家介绍C# 中Employee对象的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
C# Employee对象
命令的名字是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对象的作用是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。