动态在调试器中正确显示,但在尝试访问值时失败

时间:2013-03-19 11:43:04

标签: c# dynamic

我有一个奇怪的问题。我有一种方法需要IEnumerable dynamic以后我必须迭代来做一些事情。

调用该方法的代码是:

GuardarControlCristalesPedidos(
    items.Select(o => new {o.Id, o.CantidadRecibida, o.Cerrado}));

此方法编码为

public static void GuardarControlCristalesPedidos(IEnumerable itemsAGuardar)
{
    var session = FactoryProvider.GetCurrentSession();
    using (var t = session.BeginTransaction())
    {
         foreach (dynamic item in itemsAGuardar)
         {
              var cItem = session.Load<PedidoItem>(item.Id);
              cItem.CantidadRecibida = item.CantidadRecibida;
              cItem.Cerrado = item.Cerrado;
              session.Save(cItem);
         }
         t.Commit();
    }
}

现在,我遇到的问题是程序无法抛出'item.Id' produjo una excepción de tipo 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'

但奇怪的是,当我使用调试器访问dynamic变量时似乎没问题(IDE显示成员正常,但在我尝试访问item.Id时失败

Dynamic Debugger Watch

这里发生了什么?

1 个答案:

答案 0 :(得分:0)

这可能会有效:

var cItem = session.Load<PedidoItem>((int)item.Id);