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 に答える