gpt4 book ai didi

c# - dot net 是否有像 IEnumerable 这样带有 Count 属性的接口(interface)?

转载 作者:可可西里 更新时间:2023-11-01 08:31:35 24 4
gpt4 key购买 nike

dot net 是否有像 IEnumerable 这样带有计数属性的接口(interface)?我知道 IList 和 ICollection 等接口(interface)确实提供了 Count 属性,但似乎这些接口(interface)首先是为可变数据结构设计的,用作只读接口(interface)似乎是事后才想到的——存在 IsReadOnly 字段和 mutators 抛出异常当此属性为真时,IMO 对此提供了充分的证据。

目前我正在使用一个名为 IReadOnlyCollection 的自定义接口(interface)(请参阅我自己对这篇文章的回答),但我很高兴知道其他替代方法。

最佳答案

ICollection 系列和 IEnumerable 系列之间的主要区别在于存在的项目数量不确定(项目通常会根据需要生成/加载/水化)——在某些情况下,Enumerable 可能不会永远完成生成结果,这就是缺少 Count 的原因。

可以根据您的要求派生和添加计数,但这违背了这种精神,而这正是 ICollection 的目的 - 一个包含一切的东西的集合。

另一种方法可能是使用 System.Linq.Enumerable.Count 方法,即

using System.Linq;

class X
{
void Y(IEnumerable<int> collection)
{
int itemCount = collection.Count();
}
}

或使用 (System.Linq.Enumerable) .ToList() 将枚举器中的所有项目拉入集合并从那里开始工作。

(还要在获得 50 个代表之前回答您的评论:-“.Count()”位是对扩展类 System.Linq.Enumerable 上的扩展方法的调用 - 扩展方法可用于派生的所有事物来自 IEnumerable,因为代码有一个“using System.Linq”,它将该命名空间中所有类中的扩展方法带入范围 - 在本例中它在类 Enumerable 中。如果你在 VS 中,按 F12 将带你到S.L.Enumerable 的定义。顺便说一句,C# In Depth 是一本用于正确学习 LINQ 的绝妙书籍 - 与逐段学习 LINQ 相比,它确实可以帮助您了解整个画面)

关于c# - dot net 是否有像 IEnumerable 这样带有 Count 属性的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/343466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com