6

私はクラスメソッドを持っています:

public object MyMethod(object obj)
{
   // I want to add some new properties example "AddedProperty = true"
   // What must be here?
   // ...

   return extendedObject;
}

と:

var extendedObject = this.MyMethod( new {
   FirstProperty = "abcd",
   SecondProperty = 100 
});

extendedObject に新しいプロパティが追加されました。助けてください。

4

3 に答える 3

13

そんなことはできません。

実行時にメンバーを追加できる動的な型が必要な場合は、ExpandoObject.

実行時にメンバーを動的に追加および削除できるオブジェクトを表します。

これには、.NET 4.0 以降が必要です。

于 2010-12-21T19:59:59.643 に答える
1

コンパイル時にプロパティの名前を知っていますか? これを行うことができるため:

public static T CastByExample<T>(object o, T example) {
    return (T)o;
}

public static object MyMethod(object obj) {
    var example = new { FirstProperty = "abcd", SecondProperty = 100 };
    var casted = CastByExample(obj, example);

    return new {
        FirstProperty = casted.FirstProperty,
        SecondProperty = casted.SecondProperty,
        AddedProperty = true
    };
}

それで:

var extendedObject = MyMethod(
    new {
        FirstProperty = "abcd",
        SecondProperty = 100
    }
);

var casted = CastByExample(
    extendedObject,
    new {
        FirstProperty = "abcd",
        SecondProperty = 100,
        AddedProperty = true 
    }
);
Console.WriteLine(xyz.AddedProperty);

これは、同じアセンブリ内の 2 つの匿名型が、同じ順序で同じ型の同じ名前を持つプロパティを持つ、同じ型であるという事実に大きく依存していることに注意してください。

しかし、これを行う場合は、具体的な型を作成してみませんか?

出力:

True
于 2010-12-21T20:05:57.130 に答える
1

ディクショナリ (プロパティ、値) を使用できます。または、c# 4.0 を使用している場合は、新しい動的オブジェクト (ExpandoObject) を使用できます。

http://msdn.microsoft.com/en-us/library/dd264736.aspx

于 2010-12-21T20:00:57.663 に答える