gpt4 book ai didi

c# - 是否可以从 C# 中的通用容器中计算出一些东西?

转载 作者:行者123 更新时间:2023-11-30 19:28:39 24 4
gpt4 key购买 nike

我有一个对象

这个对象正在转换一个Items Container(我不知道是什么项目,但我可以检查一下)。

但是有没有代码可以帮助我找到它包含多少项?

我是说

 object[] arrObj = new object[2] {1, 2};
object o = (object)arrObj;

在这种情况下 arrObj 是一个数组,所以我可以检查:

((Array)o).Length//2

但是如果我还有另外两个呢?

 ArrayList al = new ArrayList(2);
al.Add(1);
al.Add(2);
object o = (object)al ;

 List<object> lst= new List<object>(2);
object o = (object)lst;

是否有任何通用代码可以帮助我找到此转换对象中有多少项(此示例中的 o)?

当然我可以检查 if (o is ...) { } 但我正在寻找更通用的代码。

最佳答案

您可以转换为每个容器实现的接口(interface):IEnumerable .但是,为了提高性能,最好先尝试 IEnumerable<T> :

var count = -1;
var enumerable = lst as IEnumerable<object>;
if(enumerable != null)
count = enumerable.Count();
else
{
var nonGenericEnumerable = lst as IEnumerable;
count = nonGenericEnumerable.Cast<object>().Count();
}

对于 Count()要可用,您需要添加 using System.Linq;到您的 .cs 文件。

请注意这段代码有一大优势:如果集合实现了ICollection<T> - 喜欢List<T>或引用类型的强类型数组 - 此代码在 O(1) 中执行 [假设 ICollection<T>.Count 的具体实现|在 O(1)] 中执行。只有当它不存在时——比如 ArrayList或值类型的强类型数组 - 此代码是否在 O(n) 中执行,此外,它会在值类型数组的情况下装箱项目。

关于c# - 是否可以从 C# 中的通用容器中计算出一些东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14648073/

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