在获得异常后,当尝试使用索引器获取项值时,Cannot apply indexing with [] to an expression of type anonymous如下:
(简化代码片段)
List<Foo> foos = GetFoos();
List<dynamic> dynamicFoos = foos.Cast<dynamic>().ToList();
foreach (var foo in dynamicFoos)
{
var Value = foo["Name"]; // fail
}我发现自己在写这个:(C#)
List<dynamic> dynamicFoos = foos.Select(f=> ConvertToDynamic(f)).ToList();
foreach (var foo in dynamicFoos)
{
var Value = foo["Name"]; // Succeeded
}使用该方法:
private dynamic ConvertToDynamic(Foo foo){
string Json = JsonConvert.SerializeObject(Foo);
dynamic dynamicFoo = JsonConvert.DeserializeObject(Json);
return dynamicFoo;
}这是可行的,但我确信有一种比反序列化序列化对象更好的做法。
.Net Fiddle https://dotnetfiddle.net/aTZbZm (基于@Fildor注释中的链接)
有人能解释为什么转换行为与序列化不同吗?或者给出一个更好的解决方案?
发布于 2021-05-31 14:25:21
您尝试的内容不起作用,因为对象的动态表示没有索引器(因为原始对象没有索引器)。你在这里有两个选择:
如果
ExpandoObject dynamic,它在内部使用属性名的Dictionary来表示值。在使用字典之前,您必须手动填写字典,它并不像强制转换那样简单。您的序列化反序列化方法比上面的两个选项都糟糕,因为它所做的操作(字符串操作和解析)比必要的要多得多。但是,在概念上,它更类似于#1,因为它没有实现ExpandoObjects。
https://stackoverflow.com/questions/67773700
复制相似问题