我有以下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());
答案 0 :(得分:3)
我不相信你可以。我强烈建议您改为创建一个名为的新类型。看起来您知道要创建的所有属性和方法 - 所以只需创建一个Person
类型。 ExpandoObject
在某些情况下很有用,但不要指望它能够应付所有事情。
如果您真的想要一个具有此功能的动态对象,则需要从DynamicObject
派生一个类 - 如果您愿意,可以实现重载的方式(通过拦截方法调用)。