這是一個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