gpt4 book ai didi

c# - 来自 ReadOnlyCollection 的对象 []

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:37 25 4
gpt4 key购买 nike

我有一个通过反射调用最终得到的对象:

object readOnlyCollectionObject = propertyInfo.GetValue(someEntity, null);

我知道这个对象是一个通用的 ReadOnly 集合。它可能是 ReadOnlyCollection<Cat> , ReadOnlyCollection<Dog>等。为了论证,我们只说它是一个 ReadOnlyCollection<T> .

即使 Dog 派生自对象,我也知道 ReadOnlyCollection<Dog>不派生自 ReadOnlyCollection<object> .所以即使我使用反射调用 CopyTo 方法我仍然需要知道 ReadOnlyCollection 的具体类型,这是我想避免的。

我想知道如何从 ReadOnlyCollection 中获取所有元素作为对象引用数组,而不必知道 ReadOnlyCollection<T> 的特定类型 (T) .

最佳答案

许多其他答案都提到了 Cast() 和 ToArray,它们都存在类型问题。正如您所说,您不知道您的属性将实现哪个专门的 IEnumerable。但是,您可以确定它们都将实现非通用 ICollection 接口(interface)。

ICollection readOnlyCollectionObject = (ICollection)propertyInfo.GetValue(someEntity, null);
object[] objs = new ArrayList(readOnlyCollectionObject).ToArray();

ICollection readOnlyCollectionObject = (ICollection)propertyInfo.GetValue(someEntity, null);
object[] objs = new object[readOnlyCollectionObject.Count];
for (int i = 0; i < readOnlyCollectionObject.Count; i++)
objs[i] = readOnlyCollectionObject[i];

编辑:忘记更新从 IEnumerable 到 ICollection 的转换

关于c# - 来自 ReadOnlyCollection<T> 的对象 [],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/629453/

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