gpt4 book ai didi

c# - 如何为 C# 泛型集合获取一致的 .Count/.Length 属性?

转载 作者:太空狗 更新时间:2023-10-30 00:16:45 24 4
gpt4 key购买 nike

List<T>.Count属性,其中 T<>数组 .Length反而。我认为这是因为数组是固定长度的而其他数组不是,但语法上的差异仍然令人沮丧。

如果您从数组重构为列表,它会因此给出“不包含.Length 的定义”错误,并且在 .Count 时更改它似乎是浪费时间和 .Length本质上是一样的。

请问有什么好的方法可以解决吗?是否可以扩展 List<T>添加 .Length .Count 的别名属性例如,通用数组反之亦然?出于任何原因,这会是个坏主意吗?

最佳答案

您可以使用 Count LINQ提供的方法。

这是优化使用 Count ICollection<T> 提供的属性(property)可能的接口(interface)(或 .NET 4 中的非通用 ICollection 接口(interface))。所以数组,List<T> etc 都将被优化。

var yourList = new List<string> { "the", "quick", "brown", "fox" };
int count1 = yourList.Count(); // uses the ICollection<T>.Count property

var yourArray = new[] { 1, 2, 4, 8, 16, 32, 64, 128 };
int count2 = yourArray.Count(); // uses the ICollection<T>.Count property

var yourEnumerable = yourArray.Where(x => x > 42);
int count3 = yourEnumerable.Count(); // no optimisation, iterates the sequence

或者,如果您想要某种一致的计数属性,而又不想冒在非优化情况下迭代整个序列的风险,那么您可以创建自己的扩展方法。 (我个人不会走这条路。)

int count4 = yourList.GetCount();  // uses the ICollection<T>.Count property
int count5 = yourArray.GetCount(); // uses the ICollection<T>.Count property
int count6 = yourEnumerable.GetCount(); // compile-time error

// ...

public static class CollectionExtensions
{
public static int GetCount<T>(this ICollection<T> source)
{
if (source == null) throw new ArgumentNullException("source");
return source.Count;
}

public static int GetCount(this ICollection source)
{
if (source == null) throw new ArgumentNullException("source");
return source.Count;
}
}

关于c# - 如何为 C# 泛型集合获取一致的 .Count/.Length 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5628915/

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