如何从动态对象中获取价值

时间:2015-12-29 17:46:33

标签: c# .net

我有一个DataGrid绑定到动态列表,现在我想要的是从DataGrid获取所选项的值,但得到错误Additional information: 'object' does not contain a definition for 'Receipt_Date'

以下是代码:

 var selectedItem = itemsDataGrid.SelectedItem as dynamic;
 Debug.WriteLine(selectedItem.Receipt_Date); //This line is throwing exception.

当我在Visual Studio中的立即窗口中打印selectedItem时,我可以看到如下值:

{ ID = 426, 
  Receipt_Date = 12/30/2014 12:00:00 AM, 
  Total= 380.8200, 
  Tax = 0.0000, 
  Amount_Final = 373.2000, 
  flag = 0.0000 }

我是新手,并且不知道我哪里弄错了。

1 个答案:

答案 0 :(得分:1)

我将首先指出您的代码存在的问题......

var selectedItem = itemsDataGrid.SelectedItem as dynamic;

使用var意味着编译器将通过查看代码中的赋值来推断类型。问题是您已为其分配dynamic,并且dynamic类型在运行时之前不会绑定。因此,您的代码中存在矛盾,使用var时无法推断dynamic的类型。编译器将验证var类型上的每个属性或函数调用,因为它在编译时应该是已知类型。 Dynamic不能像这样工作,动态类型的属性和函数在编译时不会被验证。

你应该试试这个:

dynamic d = itemsDataGrid.SelectedItem;
Debug.WriteLine(d.Receipt_Date);

现在我的问题不仅仅是纯粹的学习,为什么要这样做?

我个人在访问我没有C#类型的COM对象时只使用dynamic