gpt4 book ai didi

c# - 转换为动态类型变量的通用列表

转载 作者:太空狗 更新时间:2023-10-29 23:02:16 25 4
gpt4 key购买 nike

我需要更改 Capacity List<*DynamicType*> 类型的动态变量的属性.问题是 Activator返回 object -casted 变量,如果没有指定变量类型而不是正确的 List<*DynamicType*>我能做的最好的就是将它转换为 IList :

DynamicTypeBuilder builder = new DynamicTypeBuilder() { ... };
Type dataType = builder.GenerateType(...);
Type listDataType = typeof(List<>).MakeGenericType(dataType);
IList list = (IList)Activator.CreateInstance(listDataType);

经过一番搜索,我只发现了一个 hack:

dynamic dynamicList = list;
dynamicList.Capacity = dataRowsCount;

虽然这对我来说是可以接受的,但我想知道是否还有其他方法可以做到这一点。

最佳答案

你可以通过反射来做到这一点:

var capacityProperty = listDataType.GetProperty("Capacity");
capacityProperty.SetValue(list, dataRowsCount, null);

另一种方法是编写一个通用方法,以静态类型的方式执行您想要的所有操作,然后用反射调用that。这是确保您只需要一次反射(reflection)的便捷方式。

关于c# - 转换为动态类型变量的通用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7776873/

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