c# – 为什么List.IndexOf(T)不返回可空的int是否有实际的原因?

方法 List<T>.IndexOf()返回 the zero-based index of the first occurrence of item within the entire List,if found; otherwise,–1.

我正在看到一个平行的事情,而我刚才在Code Complete看到的,这告诉我“避免具有隐含含义的变量”.

For example:
The value in the
variable pageCount might represent the number of pages printed,unless
it equals -1,in which case it indicates that an error has occurred.

嗯,我不知道这个含义是否“隐藏”,因为它的记录足够清楚,但是null似乎比-1表示更好的意义,而.HasValue读取像一个更好的检查比> -1.据我所知,列表和可空类型都在C#2.0中引入,所以我不认为重新调用int的原因与向后兼容性有关.那么,你知道是否有理由,或者这只是一个人忘记实施的东西,现在我们必须永远生活在这错误之中?

解决方法

列表与2.0版本的运行时间一样是可空的T.但是List实现了 IList,它与1.0版本的运行时不兼容,不支持泛型.为了满足IList接口的合同,实现者必须在索引失败时返回-1.代码完整还维护您必须符合您同意的合同,因此List.Indexof必须返回-1.

回答评论

在具有泛型的2.0运行时,已经有数千个针对非通用版本的应用程序.该代码将被允许通过支持通用接口作为非通用接口的扩展来最有效地进行迁移.此外,图像具有相同名称和90%相同用法的类,但是在几种方法完全不同的语义的情况下.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...