【问题标题】:Remove an object from List of dynamic object从动态对象列表中删除对象
【发布时间】:2020-06-04 03:37:48
【问题描述】:
//Data is IList<ExpandoObject>
var result = (from dynamic item in Data
              where item.id== "123"
              select item).FirstOrDefault();

想要实现以下功能,但通过说 remove not available for dynamic objects 会出错。

Data.Remove(result);

如果有任何建议,请告诉我。 谢谢

【问题讨论】:

  • 你有没有试过在通过时将result 转换回ExpandoObject
  • 你能发布确切的错误信息吗?
  • 这能回答你的问题吗? Add dynamic to IList<T> fails

标签: c# linq dynamic


【解决方案1】:

错误:删除不适用于动态对象

基于Microsoft's docsIList&lt;T&gt;Remove方法接受T类型的参数:

ICollection<T>.Remove(T)

在您的示例中,TExpandoObject,因此这意味着在 Remove 方法中您应该传递一个类型为 ExpandoObject 的参数,但您没有传递一个参数dynamic 的类型。因此你面临这个错误

要解决这个问题,您有两种方法:

1) 使用显式类型而不是var

ExpandoObject result = ...

2) 将result 传递给Remove 时将其转换为:

Data.Remove((ExpandoObject) result)

我认为通过其中一种方式,您的问题将得到解决。祝你好运。

【讨论】:

  • LINQ 表达式将ExpandoObject 转换为dynamic,因此作为将result 声明为ExpandoObject (#1) 的一部分,您必须将LINQ 表达式的结果转换回到ExpandoObject。 #2 可能一目了然更容易理解,无需修改即可。
  • "所以这意味着在 Remove 方法中你应该传递一个 ExpandoObject 类型的参数,但你没有传递一个动态类型的参数"我不确定这是否完全准确。 dynamic 的意义在于它可以被传递而不是任何东西,并且它可以在运行时得到解决。请注意,这个(OP)在 .net 3.0 中完美运行,所以我怀疑这只是在 .net 核心中修复的框架错误。
  • 查看我对原始错误的评论。
猜你喜欢
  • 2021-08-03
  • 2022-01-08
  • 2022-01-16
  • 2018-07-08
  • 2019-01-25
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
相关资源
最近更新 更多