yjrun 发表于 2009-12-3 22:17:00

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

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

雪山飞狐_lzh 发表于 2009-12-3 22:31:00

<p>&nbsp;Linq响铃应该做过的,等他解析吧</p><p>我一直没时间折腾这东东,:)</p><p>不过感觉这样处理效率会不会。。。?</p>
页: [1]
查看完整版本: 解惑,关于LinqToARX中一个函数的代码问题