102

これに対処するいくつかの質問があることは知っていますが、答えは通常、辞書またはパラメーターのコレクションを推奨するという行に沿って続きますが、これは私の状況では機能しません。

私は、リフレクションを通じて機能するライブラリを使用して、プロパティを持つオブジェクトで多くの巧妙なことを行います。これは、動的クラスだけでなく、定義されたクラスでも機能します。これをさらに一歩進めて、次の行に沿って何かを行う必要があります。

public static object GetDynamicObject(Dictionary<string,object> properties) {
    var myObject = new object();
    foreach (var property in properties) {
        //This next line obviously doesn't work... 
        myObject.AddProperty(property.Key,property.Value);
    }
    return myObject;
}

public void Main() {
    var properties = new Dictionary<string,object>();
    properties.Add("Property1",aCustomClassInstance);
    properties.Add("Property2","TestString2");

    var myObject = GetDynamicObject(properties);

    //Then use them like this (or rather the plug in uses them through reflection)
    var customClass = myObject.Property1;
    var myString = myObject.Property2;

}

ライブラリは、プロパティが手動で割り当てられた動的変数タイプで正常に動作します。ただし、事前に追加されるプロパティの数や種類はわかりません。

4

3 に答える 3

51

素晴らしい答えをありがとう@Clint:

Expando オブジェクトを使用してこれを簡単に解決できることを強調したかっただけです。

var dynamicObject = new ExpandoObject() as IDictionary<string, Object>;
foreach (var property in properties) {
    dynamicObject.Add(property.Key,property.Value);
}      
于 2013-04-05T13:24:23.993 に答える