这是我第一次尝试动态对象。我有一个类“Cell”,其中包含字符串ID和浮点值。我想要的是获取一个单元格列表并创建一个动态对象及其所有ID和值作为属性。
这是我的“DynamicRow”:
namespace WPFView
{
public class DynamicRow : DynamicObject
{
public List<Cell> Cells;
public DynamicRow(List<Cell> cells)
{
Cells = new List<Cell>(cells);
}
public string GetPropertyValue(string propertyName)
{
if (Cells.Where(x => x.ID == propertyName).Count() > 0)
{
//Cell.GetValueString() returns the float value as a string
return Cells.Where(x => x.ID == propertyName).First().GetValueString();
}
else
{
return string.Empty;
}
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = GetPropertyValue(binder.Name);
return string.IsNullOrEmpty(result as string) ? false : true;
}
}
}
我尝试用它测试它:
namespace WPFView
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//ArithmeticCell is derived from Cell
List<Cell> cells = new List<Cell> { new ArithmeticCell { ID = "NA2_DIR", Value = 1234 } };
DynamicRow dRow = new DynamicRow(cells);
MessageBox.Show(dRow.NA2_DIR);
}
}
}
有了这个,我得到了编译错误
'WPFView.DynamicRow'不包含'NA2_DIR'的定义,也没有接受第一个类型'WPFView.DynamicRow'的扩展方法'NA2_DIR'
我读了一些类似的问题,但他们的问题是动态对象是在与调用方法不同的程序集中定义的。在我的例子中,动态对象与调用方法在同一个项目和命名空间中。
如何解决此错误?
答案 0 :(得分:3)
问题是dRow
变量的编译时类型是DynamicRow
- 因此编译器不会将其视为动态值。
您需要将类型声明为dynamic
,以便执行执行时绑定:
dynamic dRow = new DynamicRow(cells);