2015-04-28 45 views
1

這是我第一次嘗試動態對象。我有一個類「單元」,其中包含字符串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'

我讀過一些類似的問題,但他們的問題是動態對象是在與調用方法不同的程序集中定義的。在我的情況下,動態對象與調用方法位於相同的項目和名稱空間中。

我該如何解決這個錯誤?

回答

3

問題是您的dRow變量的編譯時類型是DynamicRow - 因此編譯器不會將其視爲動態值。

您需要聲明類型爲dynamic所以綁定執行的執行時間:

dynamic dRow = new DynamicRow(cells); 
+1

哇,我不知道是否感到愚蠢,因爲我錯過了或感到喜出望外,因爲一個名人做回答我的問題 :) – Nitkov