gpt4 book ai didi

c# - 如何计算 IEnumerable 的项目数?

转载 作者:行者123 更新时间:2023-12-02 20:21:41 25 4
gpt4 key购买 nike

举个例子IEnumerable o我怎样才能获得Count项目? (无需枚举所有项目)

例如,如果实例为 ICollection , ICollection<T>IReadOnlyCollection<T> ,每个接口(interface)都有自己的 Count方法。

正在获取Count 反射属性是唯一的方法吗?

相反,我可以检查并转换 oICollection<T>例如,我可以调用 Count

最佳答案

如果计数不可用,这取决于您希望避免枚举项目的程度。

如果您可以枚举项目,则可以使用 LINQ 方法 Enumerable.Count。它将寻找一种通过转换到其中一个接口(interface)来快速获取项目计数的方法。如果不能,它将枚举。

如果您想不惜一切代价避免枚举,则必须执行类型转换。在现实生活场景中,您通常不必考虑已命名的所有接口(interface),因为您通常使用其中之一(IReadOnlyCollection 很少见,ICollection 仅在遗留系统中使用代码)。如果您必须考虑所有接口(interface),请在单独的方法中尝试它们,该方法可以是扩展:

static class CountExtensions {
public static int? TryCount<T>(this IEnumerable<T> items) {
switch (items) {
case ICollection<T> genCollection:
return genCollection.Count;
case ICollection legacyCollection:
return legacyCollection.Count;
case IReadOnlyCollection<T> roCollection:
return roCollection.Count;
default:
return null;
}
}
}

通过以下方式访问扩展方法:

int? count = myEnumerable.TryCount();

关于c# - 如何计算 IEnumerable 的项目数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52476317/

25 4 0