gpt4 book ai didi

c# - 将对象 (List) 转换为 List
转载 作者:行者123 更新时间:2023-11-30 19:35:26 32 4
gpt4 key购买 nike

我正在尝试为 REST-API 测试编写一个小型框架。我用了很多反射(reflection),遇到了一个我无法帮助自己的问题。

我使用这一行来提取用户给我的变量作为路径(字符串)

object o = input.GetType().GetProperty(name).propertyInfo.GetValue(input, null);

这个对象可以是普通类型TList<T> .现在如果它是一个 List 并且我知道类型一切都很简单,我可以使用

List<string> l = (List<string>)o; // I know its a List<string> because the user told me

将对象解析为给定的数组。但是我并不总是知道列表中对象的类型和

List<object> l = (List<object>)o; // I dont know the type and I dont care

给我一​​个错误。

Object of type "System.Collection.GenericList[System.String]" can not be converted to "System.Collection.GenericList[System.Object]"

我可以做些什么来接收对象列表?我不希望用户指定类型,因为它只是我想要关心的最后一个变量。喜欢

用户想要测试“object1.a.b.c”我只需要知道 c 的类型,因为那是测试运行的地方。

TIA

最佳答案

您可以将其转换为 IEnumerable<object> , 但不是 List<object> .原因是:香蕉列表不是水果列表,因为您可以将苹果放入水果列​​表,但不能放入香蕉列表。由于这两种类型允许不同的操作,因此它们不兼容。

序列没有“放入”操作,因此可以使用香蕉列表作为水果的序列。类似地,您可以将字符串列表用作对象的序列,而不是对象的列表

这个特性称为泛型协方差;有关详细信息,请搜索 C# 协方差,您会发现大量解释其工作原理的文章。

请特别注意,协变仅适用于引用类型;您不能将整数序列用作对象序列。你知道为什么吗?

或者,如果您有一个 IEnumerable在手头,您可以将任何序列复制到一个带有mysequence.Cast<object>().ToList()的对象列表中。 .但这是复制,不是引用转换。

关于c# - 将对象 (List<string>) 转换为 List<object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56756543/

32 4 0