【问题标题】:converting anonymous types to list in C#在 C# 中将匿名类型转换为列表
【发布时间】:2018-02-01 10:28:41
【问题描述】:

我正在尝试将匿名类型转换为列表,但出现如下调用错误。

未处理的类型异常 mscorlib.dll 中发生“System.Reflection.TargetInvocationException”

var all = from a in Fcticuclist
          join b in crlist on a.Ref_CID equals b.C_ID
          select new { b.MU_Identifier, a.Status,a.ID };

foreach (var item in all)
{
    castapprove.Add(new muapprovelist { Id = item.ID, MU_Identifier = item.MU_Identifier, Status = item.Status });
}

所以这里的“all”是匿名类型,castapprove 是一个列表,muapprovelist 是一个类,它们在同一个视图模型中声明。有什么我做错的地方吗?

【问题讨论】:

  • castapprove 如何声明?什么样的清单?你也许在使用dynamic?我的猜测是你有dynamic castapprove = ... 在这种情况下......是的,我不希望它工作。
  • TargetInvocationException 通常有一个 InnerException 来解释真正出了什么问题(以及哪里)。请也发布该信息。 muapprovelist 是该列表中元素的正确类型吗(因为它听起来像一个列表本身)?
  • 不应该new { b.MU_Identifier, a.Status,a.ID }new{MU_Identifier = b.MU_Identifier, Status = aStatus , ID = a.Status,a.ID }
  • @ZoharPeled 没问题,您不需要指定名称,编译器采用您提供的属性的名称(在这种情况下为MU_IdentifierStatusID)。
  • @RenéVogt 谢谢,我不确定。

标签: c# anonymous


【解决方案1】:

大概这是一些与动态编译某种视图和匿名类型(internal)有关的可访问性问题。也许一个务实的解决方案是在这种情况下不使用匿名类型:

var all = from a in Fcticuclist
      join b in crlist on a.Ref_CID equals b.C_ID
      select new muapprovelist {
          Id = a.ID, MU_Identifier = b.MU_Identifier,
          Status = a.Status };

foreach (var item in all)
{
    castapprove.Add(item);
}

甚至可能:

var castapprove = (from a in Fcticuclist
      join b in crlist on a.Ref_CID equals b.C_ID
      select new muapprovelist {
          Id = a.ID, MU_Identifier = b.MU_Identifier,
          Status = a.Status }).ToList();

或者:将此代码从视图区域移到作为主预编译程序集一部分的代码中。

【讨论】:

  • 我尝试了第二种解决方案,它奏效了,非常感谢。这对我来说是一个很好的学习。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 2020-04-18
相关资源
最近更新 更多