这是一个ViewModel属性定义。ExpandoObject属性未找到
private List<ExpandoObject> productList;
public List<ExpandoObject> Products {
get {
return productList;
}
set {
productList = value;
}
}
在selectedProduct ExpandoObject,我有一个名为LINENUM一个属性,它的标准方式设置ExpandoObjects:
product.lineNum = some_integer;
现在,位于另一个对象中的一个方法里面,我有这个。 object_passed_in被声明为Object,并且productList的成员被传递给它。
var selectedProduct = object_passed_in as ExpandoObject
// I have tried this as "dynamic", too
当我设置一个断点并观看“selectedProduct.lineNum”时,手表工作得很好 - 它显示正确的值。然而...
if (selectedProduct.lineNum == some_comparison_value) {
// some lines of code
}
抛出一个错误 - 一个第一次机会异常,告诉我,LINENUM不上ExpandoObject selectedProduct发现了一个属性。
我可以击败ExpandoObject就范通过它投射到一个IDictionary <字符串,对象>类型,然后访问属性是这样的:
int passed_in_lineNum = (int)selectedProduct["lineNum"];
但完全失去了使用的ExpandoObject的宗旨!
什么。上午。我在做。错误。这里???
我可以问你为什么使用这样的构造?使用ExpandoObject看起来像是一种非常令人讨厌的代码味道,也是一种体系结构(显然,当您与DLR语言进行交互时,这不适用)。 – Machinarius 2014-09-25 21:56:18
公平的问题 - 我正在处理一堆从外部来源加载到程序中的属性 - 动态的 - 它们可以是用户希望他们成为的任何用户,所以我们不知道它们在编译时被命名为什么,时间。我们既不知道它们的数量,也不知道它们的名称,所以ExpandoObject似乎是适用于此应用程序的正确选择。 – 2014-09-25 22:06:29
@Machinarius - 你会采取不同的方法?如果是这样,我很好奇... – 2014-09-25 22:15:50