2013-03-19 80 views
0

我有一個奇怪的問題。我有一種方法,預計IEnumerabledynamic後來我不得不迭代做一些事情。動態在調試器中正確顯示,但嘗試訪問值時失敗

調用該方法的代碼是這樣的:

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顯示成員正常,但在嘗試訪問0時失敗

Dynamic Debugger Watch

這到底是怎麼回事?

+0

使用動態是一個壞的選擇。使用適當的類型。什麼是項目類型的標準(這是哪種類型的列表)?使用該類型而不是動態。 – 2013-03-19 12:09:18

+0

是的,當然我會結束使用強大的類型......但我只是好奇這種奇怪的情況 – 2013-03-19 12:12:56

+0

可能會在鑄造中發生一些問題。不確定。 – 2013-03-19 12:18:53

回答

0

這可能會工作:

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

沒有...異常被拋出當試圖訪問'item.Id'時,演員將無法工作 – 2013-03-19 12:47:02

相關問題