前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么有了IndexOf,还要有FindIndex​?

为什么有了IndexOf,还要有FindIndex​?

作者头像
高一峰
发布2020-09-22 10:33:19
9090
发布2020-09-22 10:33:19
举报
文章被收录于专栏:高渡号外高渡号外
热门关键词

Java编程、C#/.NET编程、Python编程

Web前端、SQL数据库

新手编程1001问(10)

为什么有了IndexOf,还要有FindIndex?

【摘要】对于IndexOf(),相信大家都是很熟悉的,但是,昨天我们提供的List用法中还有一个FindIndex(),看起来功能描述与IndexOf()是一样的啊,可是,这真的有必要吗?既生瑜何生亮啊?

是啊,为什么啊?这两个方法对比,孰优孰劣呢?

下面详细比较一下吧:

// FindIndex的定义

public int FindIndex(Predicate<T> match);

public int FindIndex(int startIndex, Predicate<T> match);

public int FindIndex(int startIndex, int count, Predicate<T> match);

//IndexOf的定义

public int IndexOf(T item, int index, int count);

public int IndexOf(T item, int index);

public int IndexOf(T item);

// 使用方法

int index = keys.FindIndex(x => x == key);

int index = keys.IndexOf(key);

//返回值

第一个匹配的位置索引值,如果不存在,则返回-1。

对呀,既然使用起来,功能和返回值是一样的,有必要定义两套东西吗?

答案挺有意思:这样做是有历史原因的。

因为在C#1.0中,只有IndexOf()。

C# 2.0里觉得这个功能不够灵活,只能匹配整个对象,比如说要查找某个元素的属性等于某个值,就不行了,于是创造了FindIndex()。

原因就这么简单。但是,我们要知道FindIndex()与IndexOf()差别还是很大的,前者能操作的对象和返回的数据更多,使用更灵活。

因此,顺着这个思路,到了C# 3.0时代,觉得FindIndex又不行,只能作用于List,所以又有了LINQ,有了Where...

当然LINQ的产生原因也不是那么单纯的,这是后话了,有机会咱们再详细讨论。

总之,微软的理念一直都是要考虑“兼容”的,商业软件必须保证向前兼容。就如有的网友说的不能因为有了新的,就不支持旧的,不然就不叫升级只能叫更新了。所以,如此这般,看似重复的功能就这样被保留了下来。

其实,IndexOf()用顺手了,一些简单的检查需求,用起来还是很方便的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 高渡号外 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档