问题标签 [ilist]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
24904 浏览

.net - IEnumerable 的转换到 IList

如果一个方法采用 System.Collections.IList 类型的参数,我可以合法/安全地传递一个类型的值System.Collections.Generic.IEnumerable<T>吗?

我将不胜感激详细解释为什么这是可能的,以及在方法内部使用T时对象实际发生的情况。IEnumerable<T>

它是否转换为 Object 的基本类型?

它用作System.Collections.IEnumerable?

是否有任何情况会导致问题(即性能问题)?

在此先感谢,约翰

0 投票
3 回答
3093 浏览

wpf - 使用 MVVM 将 IList 绑定到列表控件

我正在尝试了解 MVVM 模式,并使用了一个示例程序来处理。该模型是一个 C# .net 库,在查询时返回一个IList<INote>对象。我希望我的视图能够通过数据绑定添加/编辑/删除此集合中的项目。但我不知道如何开始,使用 MVVM。请帮帮我。

模型公开了一个接口来检索IList<INote>对象,视图有一个列表框显示内容IList<INote>和几个其他控件,以将数据添加到IList<INote>.

0 投票
3 回答
3532 浏览

.net - 为什么 .NET 中没有 IArray(T) 接口?

2011 年 1 月 6 日更新:

信不信由你,我继续将此接口合并到我已经启动的开源库 Tao.NET中。我写了一篇博客文章来解释这个库的IArray<T>接口,它不仅解决了我最初在这个问题中提出的问题(一年前?!),而且还提供了一个协变索引接口,这是 BCL 中非常缺乏的(在我看来)。


问题(简而言之):

我问为什么 .NET 有IList<T>, 它实现ICollection<T>并因此提供了修改列表的方法(Add,Remove等),但不提供任何中间接口,例如在IArray<T>不修改任何列表的情况下通过索引提供随机访问。


编辑 2010 年 1 月 21 日下午 2:22 EST:

在对 Jon Skeet 的原始答案的评论中(他在其中质疑人们多久需要一次合同,例如IArray<T>),我提到类的KeysValues属性分别是和,Jon 回答说:SortedList<TKey, TValues>IList<TKey>IList<Value>

但在这种情况下,它被声明为 IList 并且您知道只使用索引器。. . . 我同意,它并不是非常优雅——但它实际上并没有给我带来任何痛苦。

这是合理的,但我会回答说它不会给你带来任何痛苦,因为你只是知道你做不到。但是您知道的原因并不是从代码中可以清楚地看出;就是你有SortedList<TKey, TValue>上课的经验。

如果我这样做,Visual Studio 不会给我任何警告:

这是合法的,根据IList<string>. 但我们都知道,它会导致异常。

纪尧姆也提出了一个恰当的观点:

好吧,接口并不完美,但开发人员可以在调用 Add/Remove/Set 之前检查 IsReadOnly 属性...

同样,这是合理的,但是:这不是让你觉得有点迂回吗?

假设我定义了一个接口如下:

现在,还假设我将实现这个接口作为一种常见的做法,但仅限于它的Walk方法;在许多情况下,我会选择设置IsCapableOfRunningfalse抛出NotSupportedException...Run

然后我可能有一些看起来像这样的代码:

我是疯了,还是这种破坏了名为 的接口的目的ICanWalkAndRun


原帖

我发现在 .NET 中,当我设计一个具有通过索引(或返回索引集合的方法等)提供随机访问的集合属性的类时,不应该或不能通过添加 /删除 items,如果我想在 OOP 方面“做正确的事”并提供一个接口以便我可以在不破坏 API 的情况下更改内部实现,我必须使用IList<T>.

看来,标准方法是使用一些IList<T>明确定义方法的实现AddInsert等等 - 通常通过执行以下操作:

但我有点讨厌这个。如果另一个开发人员正在使用我的类,并且我的类具有 type 的属性IList<T>,并且接口的整个想法是:“这些是一些可用的属性和方法”,我为什么要抛出一个NotSupportedException(或任何情况下)当他/她试图做一些根据界面应该完全合法的事情?

我觉得实现一个界面并明确定义它的一些成员就像开一家餐馆并将一些项目放在菜单上——也许在菜单的一些不起眼、容易错过的部分,但仍然菜单上——根本不可用。

似乎应该有一个IArray<T>接口,通过索引提供非常基本的随机访问,但不添加/删除,如下所示:

然后IList<T>可以实现ICollection<T>IArray<T>添加它的IndexOf,InsertRemoveAt方法。

当然,我总是可以只编写这个接口并自己使用它,但这对所有未实现它的预先存在的 .NET 类没有帮助。(是的,我知道我可以编写一个包装器来接收任何内容IList<T>并吐出一个IArray<T>, 但是......认真吗?)

有没有人知道为什么接口System.Collections.Generic是这样设计的?我错过了什么吗?是否有一个令人信服的论点反对我所说的关于明确定义成员的方法的问题IList<T>

我并不想显得自大,好像我比设计 .NET 类和接口的人更了解;这对我来说没有意义。但我已经准备好承认有很多我可能没有考虑到。

0 投票
9 回答
130254 浏览

c# - 将 IList 转换为列表

我正在尝试将IList类型转换为List类型,但每次都会出错。

Model.subproduct返回IList<SubProduct>

0 投票
1 回答
451 浏览

c# - ASP.NET MVC 2:编辑嵌套实体的 C# 视图是什么样的?

在过去的几周里,我多次尝试让服务器端 MVC 2 视图处理具有嵌套 IList 元素的对象,但没有取得多大成功。我缺少一些基本的理解,我希望这个问题能得到解决。

我想要的是一个显示产品列表的表单,您可以在其中在线更改信息,包括层次结构(一个产品列表,每个产品都有一个子产品列表,每个产品都有一个图像列表等)我正在尝试重新创建一个旧的 MS Access 表单,其中大表单有一个产品列表,子表单显示相关产品,所有这些都允许在线编辑。Access 会在关注不同的记录时保存每条记录。

假设您有一个如下所示的领域模型:

还有一个看起来像这样的视图模型:

在 MVC 2 视图中,您将如何对 Edit 字段进行编码,以便将单个模型发布回控制器?我熟悉

机制,但每个 IList 都需要一种在同一屏幕上 CRUD 元素的方法。这是一个大数据输入屏幕,速度与能够查看列表中的所有产品一样重要。我需要添加按钮、删除按钮以及在编辑任何输入后发布整个表单的方法。

如果我从 JQuery 的角度来看:

  • 我将模型序列化为 JSON,用于前 N 个 IList 元素的初始形式
  • 当它们到达容器 div 的底部时,我会在同一列表中动态加载其他产品
  • 我在保存/发布时接受整个模型或接受单个实体的相同表单的片段,例如每个 IList 元素都有一个单独的 html 表单标签

但出于某种原因,我只是不知道如何在服务器端执行此操作。视图本身的任何链接或示例代码都会很棒。没有 IList 的元素似乎工作得很好,尤其是使用 UI 模板。我会在每个可编辑实体周围创建一堆单独的 html 表单标签,并让帖子一次只处理一个元素吗?

0 投票
1 回答
1460 浏览

c# - 大型数组中的内存泄漏 - 子类化 IList 会修复它吗?

我需要提高我的应用程序的内存性能,我可以看到我有内存碎片问题。

我读过Red Gate 的 Andrew Hunter 的一篇关于大型物体的有趣文章,他推荐的解决方案之一是:

如果大型数据结构需要长期存在,特别是如果它们需要随时间增长,最好的方法就是考虑使用或编写不同的数据结构来存储它们。数组在放入大对象堆之前最多可以包含大约 10,000 个元素,并且可能会导致问题,因此存储 100,000 个条目的一种非常有效的方法可能是存储 10 个数组,每个数组包含 10,000 个元素:没有一个会出现在大对象上堆所以不会发生碎片。这可以写成一个IList子类,这样可以很容易地透明地替换现有代码。

我如何在我的代码中实现他的建议?

我的程序有一个非常复杂的形式(每次打开时都会留下剩余内存的对象。我发现了一个可能是罪魁祸首的复杂列表,我想实施他的建议,看看它是否能解决问题。

0 投票
1 回答
485 浏览

.net - 为什么 SortedList(TKey,TValue).Keys 属性是 IList(TKey) 而不是 ReadOnlyCollection(TKey)?

IList<T>除了属性不支持的操作(SortedList<TKey, TValue>.Keys例如AddRemove和)之外,该接口还包括按索引访问Insert

A ReadOnlyCollection<T>,例如 的返回值List<T>.AsReadOnly,实现IList<T>并因此提供按索引访问,但通过显式实现它们来隐藏非法操作Add等。此外,它只是底层列表的包装器;所以它不会创建副本,因此(我会假设)不会对性能造成任何实际影响。

知道为什么SortedList<TKey, TValue.Keys不是 aReadOnlyCollection<TKey>吗?(就此而言,为什么该Values属性不是ReadOnlyColllection<TValue>?)

0 投票
2 回答
195 浏览

c# - 是否投射 IList到 T[] 类型的数组导致枚举?

我有一个看起来像这样的方法:

当方法的主体被执行时,枚举是否在强制转换期间发生?如果基础类型不同,这种情况会改变吗?

0 投票
3 回答
2907 浏览

c# - 我应该使用 ArrayList 还是 IList

我正在使用 .NET 框架 1.1,我希望有人可以帮助我实现一个动态对象数组?

下面是我希望使用的对象的淡化示例。

我应该使用 ArrayList 还是您认为创建 CarList 类来实现 IList 接口会更好?彼此之间是否有性能优势?

0 投票
2 回答
572 浏览

vb.net - 从自定义列表转换​​为字符串列表

大家好,我有以下代码:

目的是将自定义对象的 IList 转换为包含 Ilist 中每个元素的等效字符串。不幸的是,我似乎找不到获取自定义对象底层数据的方法,当然就像上面的例子一样,使用 object 只是给了我一串类型定义,而不是访问底层数据。非常感谢任何帮助。

保罗。