0

我有以下 expando 对象

 dynamic person = new ExpandoObject();
        person.FirstName = " FirstName ";
        person.SecondName = " FirstName ";
        person.FullName = person.FirstName + person.SecondName;
        person.BirthDate = new DateTime(1990, 1, 1);

        person.CalcAge = (Func<int>)
            (() => DateTime.Now.Year - person.BirthDate.Year);

我定义CalcAge了计算年龄的方法..我想添加具有如下参数的重载方法

person.CalcAge = (Func<DateTime, int>)
            ((DateTime date) => date.Year - person.BirthDate.Year);

我该如何实现它ExpandoObject,我可以在其中执行以下操作?

int age1 = person.CalcAge();
MessageBox.Show(age1.ToString());

int age2 = person.CalcAge2(new DateTime(1980, 1, 1));
MessageBox.Show(age2.ToString());
4

1 回答 1

3

我不相信你可以。我强烈建议您创建一个新的命名类型。看起来您知道要创建的所有属性和方法 - 所以只需创建一个Person类型。ExpandoObject在某些场景下很有用,但不要指望它能够应付一切。

如果您真的想要一个具有此功能的动态对象,则需要从中派生一个类DynamicObject- 这样您就可以实现重载,如果您愿意(通过拦截方法调用)。

于 2013-03-25T08:02:26.060 回答