【问题标题】:"Dynamic object does not contain a definition" error in same namespace同一命名空间中的“动态对象不包含定义”错误
【发布时间】:2015-04-28 13:52:25
【问题描述】:

这是我第一次尝试动态对象。我有一个包含字符串 ID 和浮点值的类“单元格”。我想要的是获取一个 Cell 列表并创建一个动态对象,并将其所有 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”

我读过一些类似的问题,但他们的问题是动态对象是在与调用方法不同的程序集中定义的。在我的例子中,动态对象与调用方法在同一个项目和命名空间中。

我该如何解决这个错误?

【问题讨论】:

    标签: c# dynamicobject


    【解决方案1】:

    问题在于您的 dRow 变量的编译时类型是 DynamicRow - 因此编译器不会将其视为动态值。

    您需要将类型声明为dynamic,以便执行执行时绑定:

    dynamic dRow = new DynamicRow(cells);
    

    【讨论】:

    • 哇,我不知道是因为我错过了而感到愚蠢,还是因为名人回答了我的问题而感到欣喜若狂:)
    猜你喜欢
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多