其实我希望是gdb赢的。。。
这就诞生了新的问题:如果一个列表页A的来源,不止初始页面H,还有多个页面可以跳转列表页A,那么列表页A的网页「返回」按钮,应该返回到哪里呢?...但网页「返回」按钮还有个问题必须解决:若浏览器当前历史记录栈为空,或历史记录栈的上个页面并非该网页的页面,点「返回」,应该也能返回它的父页面。现在我告诉你,这个技术难点,是有解的!...4.4 实现方案「返回」按钮,逻辑如下判断历史记录栈的上个页面,是不是我的父页面。如果是我的父页面,我就用history.back(),使用浏览器原生返回行为。...与此同时,我还没剥夺用户使用原生「返回」的权利。...总算是完成了令我满意的「返回」如果你想体验我的游戏,看看「返回」的交互,欢迎访问 game.hullqin.cn写在最后我是HullQin,公众号线下聚会游戏的作者(欢迎关注我,交个朋友)。
比如,在同一个服务契约中,我定义了如下3个操作,他们的参数类型分别为IEnumerable、IList和Customer[]。...[]与通过IList表示也具有等效性,我们能否让数组类型变成IList类型呢,毕竟从编程角度来看,它们还是不同的,很多时候使用IList要比直接使用数组方便得多。...但是对于不能预先确定元素类型的IEnumerable和IList就不一样了。 下面我将演示IEnumerable和IList两种类型的序列化。...}); 无论是基于IEnumerable类型,还是基于IList,最终序列化生成的XML都是一样的。...、IEnumerable、IList、IList,还是现在介绍的Hashtable和IDictionary,最终序列化的都是ArrayOfXxx。
大家好,又见面了,我是你们的朋友全栈君。...一、LIST概述 所属命名空间:System.Collections.Generic public class List : IList, ICollection, IEnumerable..., IList, ICollection, IEnumerable List类是 ArrayList 类的泛型等效类。...二、性能注意事项: 在决定使用IList 还是使用ArrayList类(两者具有类似的功能)时,记住IList 类在大多数情况下执行得更好并且是类型安全的。...List.FindLast 方法:搜索与指定谓词所定义的条件相匹配的元素,并返回整个 List 中的最后一个匹配元素。
使用非泛型集合的委托方法 先看看.NET类中的一个返回列表数据的方法: //返回List或者数组,不影响 C++调用 public List GetUsers(string...注意,这里传递的还是.NET的集合,所以这里需要做3件事情: 1,首先构建一个.NET集合对象; 2,转换C++本机结构数据到.NET集合元素; 3,反射调用.NET方法,传递数据过去。...,但我们并不知道这个List具体的形参类型,所以这个泛型List还是无法直接使用,幸好,泛型List也是继承自非泛型的IList接口的,所以在 CreateGenericList 方法中将泛型List对象转换成...IList接口对象,之后就可以愉快的使用List对象了。...> fun; FuncIEnumerable> fun2; 这里,fun,fun2都可以绑定到方法上,因为泛型方法的形参作为返回值,是out的,可以使用派生程度更小的类型
项 “值” RuleId CA1010 类别 设计 修复是中断修复还是非中断修复 非中断 原因 类型实现 System.Collections.IEnumerable 接口,但不能实现 System.Collections.Generic.IEnumerable... System.Collections.Generic.ICollection System.Collections.Generic.IList 何时禁止显示警告 禁止显示此规则的警告是安全的...`1 所有实现 ISomething 的类型,无论其名称空间如何,都应该实现 System.Collections.Generic.IEnumerable。...System.Collections.IDictionary->T:System.Collections.Generic.IDictionary`2 所有实现 System.Collections.IDictionary 的类型都应该实现...通过接口实现来解决 以下示例通过实现 IEnumerable、ICollection 和 IList 等泛型接口来解决冲突。
自己实现一个栈还是比较简单的,可以借助List进行存储。 Stack应用一例:测试回文字符串 所谓回文是指向前和向后拼写都完全一样的字符串。...字典的实现原理前面已经说过了,它和哈希表的实现原理有所不同,但它最大的优势还是在于泛型。...提供索引器 List 索引器 IList 继承了Ilist(以及其他接口) ArrayList的泛型版本 最常用的泛型集合 如果不需要很强的功能,可以考虑用IEnumerable...替代作为返回类型 IQueryable 通过IndexOf IEnumerable 从远端获得筛选之后的资料,和IEnumerable不同,IQueryable返回所有资料然后才进行筛选...在遇到数组查重问题时,哈希永远都是一个利器:https://www.zhihu.com/question/31201024 IEnumerable最重要的一个派生类就是IList接口。
大家好,又见面了,我是全栈君 集合,表示可以通过遍历每个元素来访问的一组对象(特别是可使用foreach循环访问) 一个集合包括多个元素,即有一个集合类对象和N个元素对象 因为任何集合类都实现了IEnumerable...接口,所以任何集合类对象都有一个GetEnumerator()方法,该方法可以返回一个实现了 IEnumerator接口的对象,这个返回的IEnumerator对象既不是集合类对象,也不是集合的元素类对象...,该枚举数支持在集合上进行简单迭代 它只有一个方法 GetEnumerator(),该方法可以返回一个IEnumerator接口,通过它可以遍历集合 基本上所有的集合类都实现了这个接口 3)IList...IList实现是可排序且可按照索引访问其成员的值的集合,它本身实现了ICollection和IEnumerable接口 是所有列表的抽象基类。...IList 实现有三种类别:只读、固定大小、可变大小。
- IList和IList IList则是直接继承自ICollection和IEnumerable。所以它包括两者的功能,并且支持根据下标访问和添加元素。...我通常倾向于将接口作为方法和属性的返回类型,而不是保证一个特定的实现类。在API中公开易变集合之前,你也应该深思熟虑,特别是当集合代表的是对象或类型的状态时。...它实现了IList,因此也实现了ICollection、IEnumerable和IEnumerable。...尽管LinkedList实现了Add等标准方法(向链表末尾添加节点),我还是建议使用显式的AddFirst和AddLast方法,这样可以使意图更清晰。...尽管如此,还是有必要了解一下的,以便知道它们不是什么。图B-2展示了三个接口间以及和IEnumerable接口的关系。
public interface IEnumerable { IEnumerator GetEnumerator(); } 注意:我们经常用的foreach即是一种语法糖,实际上还是调用Enumerator...: 如果我们集合是通过封装其它集合类而来的,那么我们可以直接返回这个集合的enumerator 通过yield return 来返回 实现我们自己的IEnumerator来实现 这里给大家演示一下如何通过...yield来实现返回enumerator public class BuddyList : IEnumerable { private string[] data= new string[]...IList和IList IList则是直接继承自ICollection和IEnumerable。所以它包括两者的功能,并且支持根据下标访问和添加元素。...我们可以这样说,IEnumerable支持的功能最少,只有遍历。而ICollection支持的功能稍微多一点,不仅有遍历还有维护这个集合的功能。而IList是最全的版本。
c#数组的几个简单的补充 数组是引用类型,不论其元素是值类型还是引用类型。...System.Collections.IList // 集合的父基类,定义了返回元素数量,复制等一些集合类型最基本的方法,同时提供了可以同步访问ICollection对象元素的方法,数组具有这些能力 System.Collections.ICollection...// .net4 新增接口,定义比较能力,数组可以比较数组是否具有相同的内容 如果元素数量不同直接返回不相等,同时具有几个元素就会执行几次比较 System.Collections.IStructuralEquatable...所有的数组默认继承自Array抽象类,该类实现了如上的接口,但在查看源码不能看到数组实现如下接口,这些接口实在CLR动态为一维数组实现如下的接口 */ System.Collections.Generic.IList...这些动作是由CLR (公共语言运行时)执行的,内部原理并不清楚,但一般而言linq查询是对集合进行操作,数组属于集合,但由于存在多维数组,数组不能直接实现IEnumerable泛型接口获取linq查询的能力
迭代器模式 与 C# IEnumerator/IEnumerable Part1 迭代器模式 与 接口 IEnumerable IEnumerator interface IEnumerable{...yield return 语句返回集合的一个元素,并移动到下一个元素,相当于同时维护 Current 和 MoveNext ;yield break 可停止迭代。...Part4 实现多个不同的 IEnumerator 有一个 MusicCollection 集合类,里面包含了 IList{Music} 集合,现在要在其中实现对 Music.Title , Music.Author..., Music.Time 进行遍历的支持,可以这么做: public class MusicCollection{ private IList MusicList; public...MusicCollection(IList musicList) { MusicList = musicList; } public IEnumerator
public void Test(){} 这样的形式; 函数,指具有确定命名的、并且可以通过名称调用的代码,属性、字段、方法、委托、事件等; 只要能够通过确定的名称调用(使用)的代码块,就是函数;而方法就是 返回值...`1 *************** IList`1 ICollection`1 IEnumerable`1 IEnumerable IList ICollection IReadOnlyList`1...IReadOnlyCollection`1 注意的是,如果要通过名称获取接口 Type ,需要使用 泛型类别的名称,例如 IList1`。...到底是 Type 里面的字段都是 Public 的,还是反射只能获取到类型 Public 字段? 我们通过实验验证一下。...view=netcore-3.1 1.2.5 事件 使用 GetEvent() 或 GetEvents() 可以获取类型的事件列表,返回 EventInfo / EventInfo[] 类型。
记得第一次见着它俩的时候,我说怎么看了半天怎么第一部分是它,第二个部分还是它?甚至我一度以为它们是同一个东西。(关于认证和授权将在后期为大家介绍。)...IEnumerable说:我提供了公开枚举器,并且该枚举器支持在非泛型集合上进行简单迭代的功能。 IEnumerator说:我提供了支持对非泛型集合进行简单迭代的功能。...那我们就来查看IList的接口继承关系: public interface IList : ICollection, IEnumerable 果不其然,它继承了IEnumerable接口。...好吧,它就是摇奖机,不用想它肯定是继承了IEnumerable。...还是那句话,希望本篇文章没有花费您太多的时间。(ง •_•)ง
下面的我将以一个简单的案例(出自《ASP.NET》设计模式)详解MVP思想的应用,当然MVP和MVC一样都是属于表现层的设计模式,我将参考上述两幅图中的分层思想来创建应用程序,下图为分层体系结构创建完毕时解决方案目录...GetBasketProducts(); } } public void Add(Model.Product product) { IList...> GetBasketProducts() { var products = HttpContext.Current.Session["Basket"] as IList...“所以我更倾向于View并不知道按钮点击后回发生什么事,如Update数据,但是点击后界面有什么光线,水纹,这个应该是View关心的,View应该更注重的是和用户交互的反应。”...使用Ioc容器如StructureMap,首先配置依赖关系(即当向Ioc容器询问特定的类型时将返回一个具体的实现),所以这又叫依赖注入: public class BootStrapper {
当然重构的整体架构得另当别论(整体架构在我的这篇文章有专门的讲解(http://www.cnblogs.com/zenghongliang/archive/2010/06/23/1763438.html...那么我这些文章也都是学习Sean Chambers的31天重构的笔记整理,所以如果大家对这个笔记有任何异议也可以指出。...比如最经典的属性对字段的封装就是一个很好的例子,那么下面我们将看到对集合的封装,如下代码所示,调用端只需要一个集合的信息,而我们则提供了一个IList的集合,大家都知道IList具有对集合的所有操作,所以这会带来很多隐患...换成了IEnumerable,大家都知道只包括一个返回值为IEnumerator的GetEnumerator()方法,所以这样只能遍历取出它的值,而不能对这个集合做出改变,这正是我们所需要的结果,具体代码如下...{ private List _orderLines; private double _orderTotal; public IEnumerable
,,,我去,可以哇!那么是不是ExecuteReader容易有啥坑的问题呢?想了想,对头,是不是返回的reader有点问题? ? 先关了看看~我去,有值了!不会这么容易就搞定了吧?不行,得再试试 ?...不能就这样算了啊,我不能总自己写吧,sqlhelper的问题还是得解决 ? 我去,还是没有。。。。。。。这可不行,看看sqlhelper的源码怎么搞的 ? 万恶的清除啊!再试试 ?...扩:一般很少直接返回SqlDataReader对象的, ?...贴一个比较弱的转换(有更好的可以贴评论中的,我就先抛个砖头) public static IEnumerable SqlDataReaderToList(SqlDataReader reader...using (reader) { if (reader.HasRows) { IList
ArrayList ArrayList类继承了以下几个接口 public class ArrayList : IList, ICollection, IEnumerable, ICloneable..., ICollection, IEnumerable, IList, ICollection, IEnumerable T就是列表中元素的类型,下面我们以string为例进行说明一下List...主要也是它们共同继承了IList,ICollection,IEnumerable三个接口。 T当然也可以是自定义的类型,这也是我们在日常的编程中应用最为广泛的。...这里也只是简单的介绍了我觉得最常见的几个集合的使用。 英语小贴士 Don't be silly。——别胡闹了 I am not available。...——我正忙着 There is nothing I can do。——我什么都不能做 Are you still at outside?
当然重构的整体架构得另当别论(整体架构在我的这篇文章有专门的讲解(http://www.cnblogs.com/zenghongliang/archive/2010/06/23/1763438.html...那么我这些文章也都是学习Sean Chambers的31天重构的笔记整理,所以如果大家对这个笔记有任何异议也可以指出。 概念:本文所讲的封装集合就是把集合进行封装,只提供调用端需要的接口。...比如最经典的属性对字段的封装就是一个很好的例子,那么下面我们将看到对集合的封装,如下代码所示,调用端只需要一个集合的信息,而我们则提供了一个IList的集合,大家都知道IList具有对集合的所有操作,所以这会带来很多隐患...换成了IEnumerable,大家都知道只包括一个返回值为IEnumerator的GetEnumerator()方法,所以这样只能遍历取出它的值,而不能对这个集合做出改变,这正是我们所需要的结果,具体代码如下...{ private List _orderLines; private double _orderTotal; public IEnumerable
看代码应该是 equals 比较时产生的,一次比较就有2个point被装箱放到托管堆上,这下惨了,,,而且大家应该知道引用对象本身还有(8+8) byte 自带开销,这在时间和空间上都是巨大的浪费呀。。...,还是int,貌似我的Point就比int少了接口实现,问题应该就出在这里,而且最后一个泛型接口IEquatable特别显眼,看下定义: public interface IEquatable...public class List : IList, ICollection, IEnumerable, IEnumerable, IList, ICollection, IReadOnlyList...因为这里的runtimeType实现了IEquatable接口,所以代码返回了一个泛型比较器:GenericEqualityComparer,然后我们继续查看这个泛型比较器是咋样的。 ?...从图中可以看到最终还是对T进行了IEquatable约束,不过这里给提取出来了,还是挺厉害的,然后我也学的模仿一下: ? 可以看到也走了我的自定义实现,两种方式大家都可以用哈。
领取专属 10元无门槛券
手把手带您无忧上云