c# - 无法投射对象匿名通用列表
问题描述
如果您知道我将如何枚举对象列表,请告诉我。这是它的创建方式。由于某种原因,我无法将其转换为 List、IList、Enumerable、IEnumerable。我猜这是因为它是如何创建的(由第三方)。只是看看有没有人有任何想法。
错误如下:
Unable to cast object of type '<>f__AnonymousType5`1[System.Collections.Generic.List`1[SugarRest.Model.AMP_Product_Line]]' to type 'System.Collections.Generic.List`1[SugarRest.Model.AMP_Product_Line]'.
创建对象如下:
private static AMP_Contract CreateCrmContract(ContractDetailViewModel model, int bookmanContractNumber, int renewedFromContractNumber)
{
List<AMP_Product_Line> productLines = CreateProductLinesPrint(model, bookmanContractNumber);
//Contract
AMP_Contract ampContract = new AMP_Contract();
...
ampContract.amp_amp_contracts_amp_amp_product_lines = new { productLines };
return ampContract;
}
public class AMP_Contract
{
...
public object amp_amp_contracts_amp_amp_product_lines { get; set; }
...
}
我试图访问/枚举的对象如下:
我也试过这个,但是,有问题的对象是不可枚举的,因为它是一个对象。
解决方案
首先:编写此代码的人正在积极尝试阻止您访问该集合。您应该非常努力地考虑尝试击败他们的尝试是否正确;他们可能出于某种原因隐藏了这一点。
最简单的方法是使用 dynamic 从匿名类型中读取值。然后,您可以对所需的序列类型进行动态转换:
var contract = CreateCrmContract(...whatever...);
dynamic d = contract.amp_amp_contracts_amp_amp_product_lines;
IEnumerable<AMP_Product_Line> lines = d.productLines;
现在我们又回到了静态类型的世界:
foreach (AMP_Product_Line line in lines)
Console.WriteLine(line);
推荐阅读
- apache-spark - 为什么我不能使用“cat file1.parquet file2.parquet > result.parquet”合并多个 parquet 文件?
- android - 获取 Kotlin 中两个不同对象数组列表之间的差异
- python - 我正在尝试使用 for 循环打印转义字符。我的动机是查看打印出来的值
- php - 当我已经在我的命令中使用 join 时如何使用 WHERE 命令
- java - KafkaException:类不是 org.apache.kafka.common.serialization.Deserializer 的实例
- python - 无法从“transformers.data”导入名称“is_sklearn_available”
- php - Woocommerce 配置所有运输方式
- python - 如何调整熊猫交叉表中的行和列位置?
- gcc - 为什么在使用 armv8-a 的 vmovl_u8 指令时出现汇编错误?
- html - 图像未显示在用 HTML 编写的代码中