Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态在调试器中正确显示,但在尝试访问值时失败_C#_Dynamic - Fatal编程技术网

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

C# 动态在调试器中正确显示,但在尝试访问值时失败,c#,dynamic,C#,Dynamic,我有一个奇怪的问题。我有一个方法,它需要一个IEnumerable的dynamic,以后我必须迭代来做一些事情 调用该方法的代码如下所示: GuardarControlCristalesPedidos( items.Select(o => new {o.Id, o.CantidadRecibida, o.Cerrado})); 此方法编码为 public static void GuardarControlCristalesPedidos(IEnumerable itemsAGu

我有一个奇怪的问题。我有一个方法,它需要一个
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();
    }
}
public静态void-GuardarControlCristalesPedidos(IEnumerable-itemsAGuardar)
{
var session=FactoryProvider.GetCurrentSession();
使用(var t=session.BeginTransaction())
{
foreach(ItemsGuardar中的动态项)
{
var cItem=session.Load(item.Id);
cItem.CantidadRecibida=item.CantidadRecibida;
cItem.Cerrado=item.Cerrado;
session.Save(cItem);
}
t、 提交();
}
}
现在,我遇到的问题是,程序无法抛出“item.Id”produjo una excepción de tipo“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”

但奇怪的是,当我使用调试器访问
动态
变量时,它似乎很好(IDE显示成员很好,但当我尝试访问
item.Id


这里发生了什么?

这可能会起作用:

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

使用动态是一个错误的选择。请使用正确的类型。ItemsGuardar的类型是什么(这是哪种类型的列表)?使用该类型而不是动态。是的,我肯定会使用强类型结束…但我只是好奇这种奇怪的情况可能是在强制转换中出现了一些问题。不确定。正确的答案可以在这里找到。不…尝试访问
item.Id
时抛出异常,因此强制转换将永远无法工作