Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IList的用途是什么?_C# - Fatal编程技术网

C# IList的用途是什么?

C# IList的用途是什么?,c#,C#,我已经在MSDN上搜索过了,我读到了它是非泛型的定义。。。。 但我的问题是,我不了解它的用途和使用时间。所以我希望任何人都能帮助我。谢谢。它是在.NET2.0引入泛型之前就存在的接口 它是为了向后兼容而存在的 使用泛型版本。IList(非泛型版本)是C#version one的遗留版本,当时我们没有泛型 使用C#2和.NETFramework2.0,将泛型添加到语言中,并添加集合类型的泛型实现。因此,不再需要非泛型版本,但无法从框架中删除它们,因为这将使从.NET1.1到2.0的代码移植成为一件

我已经在MSDN上搜索过了,我读到了它是非泛型的定义。。。。
但我的问题是,我不了解它的用途和使用时间。所以我希望任何人都能帮助我。谢谢。

它是在.NET2.0引入泛型之前就存在的接口

它是为了向后兼容而存在的

使用泛型版本。

IList(非泛型版本)是C#version one的遗留版本,当时我们没有泛型

使用C#2和.NETFramework2.0,将泛型添加到语言中,并添加集合类型的泛型实现。因此,不再需要非泛型版本,但无法从框架中删除它们,因为这将使从.NET1.1到2.0的代码移植成为一件痛苦的事情


如今,您几乎总是使用
IList
IList
仍然存在的主要原因是向后兼容。

它是一个接口,它通常由集合类实现,该集合类旨在提供类似列表的方法,但.net版本低于2.0,即没有泛型介绍,因此,如果您使用的是框架版本1.0,1.1,那么除了不了解泛型的旧代码外,您还可以看到此IList的用法,也有很多情况下,你知道你有一个数据列表,但你不能提前知道什么。数据绑定是这里的一个经典例子;数据源属性通常检查IList(通常是IListSource),然后查看对象以查看哪些属性可用。在这种情况下不能使用泛型

事实上,任何时候使用反射IList都比IList-of-T更方便,因为泛型和反射不能很好地结合在一起。这是可以做到的,但这是一种痛苦。不幸的是,由于IList-of-T不是从IList派生出来的,因此在某些情况下,这可能会失败——但这是一个很好的95%规则

特别是,IList允许您使用索引器,并添加/删除项目;数不清的事情不让你做


大多数应用程序级代码(即你为你的应用程序编写的日常代码)可能应该关注通用版本;但是,也有很多基础架构代码必须使用反射。

System.Collections.generic中有一个通用列表-它是list抱歉等类使用的接口,但即使现在库代码也有很多使用IList(非通用)的用途。任何不这样说的人都没有受到足够的反思/数据绑定等;)但是是的;大多数应用程序级代码应使用通用版本;请记住,有很多基础结构代码不了解您的类型,也不可能使用泛型。@Marc,我同意这些观点-当您需要非泛型版本时,会有一些用例。我试着用你几乎总是用的词来表示;-)使用
dynamic
,这些反射场景中的许多场景变得相当容易(但有时也会变慢)。因此,在.NET4中,痛苦应该会小一些。@CodeInChaos-好吧,它对诸如每类型属性之类的事情没有帮助,但是是的:找到一个Add方法可能更容易。虽然dynamic无法看到显式的实现,但有一个复杂性,因此有些东西可以实现IList和IList-of-t,但仍然完全无法从dynamic中使用。