明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1773|回复: 1

解惑,关于LinqToARX中一个函数的代码问题

[复制链接]
发表于 2009-12-3 22:17:00 | 显示全部楼层 |阅读模式

先说声抱歉,反编译看了才鸟大哥的程序。学习了下高手的程序。不过对于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;
望大家帮忙解惑。

发表于 2009-12-3 22:31:00 | 显示全部楼层

 Linq响铃应该做过的,等他解析吧

我一直没时间折腾这东东,:)

不过感觉这样处理效率会不会。。。?

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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