到底怎样才是正确的调用方式IEnumerator.Reset?文档说:TheResetmethodisprovidedforCOMinteroperability.Itdoesnotnecessarilyneedtobeimplemented;instead,theimplementercansimplythrowaNotSupportedException.好的,那是否意味着我不应该调用它?使用异常进行流量控制是如此的诱人:using(enumerator=GetSomeExpensiveEnumerator()){while(enumerator.MoveNext()){...}t
到底怎样才是正确的调用方式IEnumerator.Reset?文档说:TheResetmethodisprovidedforCOMinteroperability.Itdoesnotnecessarilyneedtobeimplemented;instead,theimplementercansimplythrowaNotSupportedException.好的,那是否意味着我不应该调用它?使用异常进行流量控制是如此的诱人:using(enumerator=GetSomeExpensiveEnumerator()){while(enumerator.MoveNext()){...}t
假设我有IEnumerableFoo(){try{///openanetworkconnection,startreadingpacketswhile(moredata){yieldreturnpacket;}}finally{//closeconnection}}(或者也许我做了一个“使用”——同样的事情)。如果我的来电者走了会怎样varpacket=Foo().First();我只剩下一个泄漏的连接。finally什么时候被调用?或者正确的事情总是神奇地发生吗编辑答案和想法我的示例和其他“正常”(foreach、..)调用模式可以很好地工作,因为它们处理了IEnumerable(实
假设我有IEnumerableFoo(){try{///openanetworkconnection,startreadingpacketswhile(moredata){yieldreturnpacket;}}finally{//closeconnection}}(或者也许我做了一个“使用”——同样的事情)。如果我的来电者走了会怎样varpacket=Foo().First();我只剩下一个泄漏的连接。finally什么时候被调用?或者正确的事情总是神奇地发生吗编辑答案和想法我的示例和其他“正常”(foreach、..)调用模式可以很好地工作,因为它们处理了IEnumerable(实
我正在实现自己的ArrayList类,当我意识到这一点时感到很惊讶publicSystem.Collections.Generic.IEnumeratorGetEnumerator(){return_array.GetEnumerator();}没用。数组不在.NET中实现IEnumerator的原因是什么?有什么解决方法吗?谢谢 最佳答案 数组确实实现了IEnumerable,但它是作为CLI对数组的特殊知识的一部分完成的。这就像它是一个显式实现一样工作(但不是:它是在运行时完成的)。许多工具不会显示此实现,这在Remarks中有
我正在实现自己的ArrayList类,当我意识到这一点时感到很惊讶publicSystem.Collections.Generic.IEnumeratorGetEnumerator(){return_array.GetEnumerator();}没用。数组不在.NET中实现IEnumerator的原因是什么?有什么解决方法吗?谢谢 最佳答案 数组确实实现了IEnumerable,但它是作为CLI对数组的特殊知识的一部分完成的。这就像它是一个显式实现一样工作(但不是:它是在运行时完成的)。许多工具不会显示此实现,这在Remarks中有
我们都知道mutablestructsareevil一般来说。我也很确定,因为IEnumerable.GetEnumerator()返回类型IEnumerator,这些结构会立即装入引用类型,这比它们一开始只是引用类型的成本更高。那么,为什么在BCL泛型集合中,所有枚举器都是可变结构?当然必须有一个很好的理由。我唯一想到的是可以轻松复制结构,从而在任意点保留枚举器状态。但是添加一个Copy()IEnumerator的方法接口(interface)本来就不那么麻烦,所以我不认为这本身就是一个合乎逻辑的理由。即使我不同意设计决定,我也希望能够理解其背后的原因。
我们都知道mutablestructsareevil一般来说。我也很确定,因为IEnumerable.GetEnumerator()返回类型IEnumerator,这些结构会立即装入引用类型,这比它们一开始只是引用类型的成本更高。那么,为什么在BCL泛型集合中,所有枚举器都是可变结构?当然必须有一个很好的理由。我唯一想到的是可以轻松复制结构,从而在任意点保留枚举器状态。但是添加一个Copy()IEnumerator的方法接口(interface)本来就不那么麻烦,所以我不认为这本身就是一个合乎逻辑的理由。即使我不同意设计决定,我也希望能够理解其背后的原因。
我想知道IQueryable、List、IEnumerator之间的区别是什么以及我应该何时使用它们?例如,当使用LinqtoSQL时,我会做这样的事情:publicListGetUsers(){returndb.User.where(/*somequeryhere*/).ToList();}现在我想知道是否应该使用IQueryable代替。我不确定在列表中使用它的优势。 最佳答案 IQueryable旨在允许查询提供程序(例如,像LINQtoSQL或EntityFramework这样的ORM)使用查询中包含的表达式将请求转换为另一
我想知道IQueryable、List、IEnumerator之间的区别是什么以及我应该何时使用它们?例如,当使用LinqtoSQL时,我会做这样的事情:publicListGetUsers(){returndb.User.where(/*somequeryhere*/).ToList();}现在我想知道是否应该使用IQueryable代替。我不确定在列表中使用它的优势。 最佳答案 IQueryable旨在允许查询提供程序(例如,像LINQtoSQL或EntityFramework这样的ORM)使用查询中包含的表达式将请求转换为另一