先说声抱歉,反编译看了才鸟大哥的程序。学习了下高手的程序。不过对于linqToArx中写的一些函数有一小疑问,没有看到,特到此地请教下。 举个例子 源代码如下: public static IEnumerable<Entity> GetAllEntitiesInModelSpace(this Database db, Autodesk.AutoCAD.DatabaseServices.Transaction trans, OpenMode openMode, bool openErased) { BlockTable table = (BlockTable) trans.GetObject(db.BlockTableId, OpenMode.ForRead); BlockTableRecord record = (BlockTableRecord) trans.GetObject(table[BlockTableRecord.ModelSpace], OpenMode.ForRead); List<Entity> list = new List<Entity>(); foreach (ObjectId id in record) { Entity item = (Entity) trans.GetObject(id, openMode, openErased); list.Add(item); } return list; } 程序比较好理解,主要的疑问在函数的返回类型上,才鸟大哥采用的是IEnumerable<Entity>,开始我以为做的是枚举器,但是看代码后感觉又不是,程序代码中并没有yield return关键字。 思考再三,有下面几种想法: 1、代码中采用的是list<T>集合,那实际函数的返回类型是list<T>,而IEnumerable<Entity>是list的基类,所以返回值选用了基类。只是不明白这样选择用基类,好处在那里?个人理解,返回类型就采用list<T>是不是会更好理解些? 2、如果纯粹为了foreach调用,那把这个函数改些成迭代器好像也可以。这样把list的定义和add都去掉,直接 yield return item; 望大家帮忙解惑。
|