11

C# で javascript のプロトタイプ プロパティに似たものを用意したいと思います。
アイデアは、javascript で行うように、クラスのインスタンスを拡張することです。
私が見つけた最も近いものは ExpandoObject を使用していましたが、既存のオブジェクトで初期化することはできません。
もう 1 つの問題は、ExpandoObject から元のオブジェクトを取得できることです。

これが私がやりたいことです:

var originalObject = new Person();
originalObject.name = "Will";
var extendedObject = new ExpandoObject();
extendedObject.lastName = "Smith";

//do something

originalObject = (Person) extendedObject;
4

1 に答える 1

19

次のようなものを使用して、問題を部分的に解決できます。

public static class DynamicExtensions
{
    public static dynamic ToDynamic(this object value)
    {
        IDictionary<string, object> expando = new ExpandoObject();

        foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(value.GetType()))
            expando.Add(property.Name, property.GetValue(value));

        return expando as ExpandoObject;
    }
}

ただし、メソッドを新しい ExpandoObject にコピーすることはできません

于 2012-11-30T19:02:58.770 に答える