2010-12-21 14 views
2

Ich habe Klasse-Methode:Wie ein Objekt der anonymen Klasse erweitern

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

    return extendedObject; 
} 

Und:

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

Nun ist die extendedObject neue Eigenschaften besitzt. Hilfe bitte.

+0

Warum tun Sie das mit anonymen Klassen? – jason

+0

Ich arbeite mit ASP.NET MVC, wo ich möchte, dass JSON-Daten mit meinen Debug-Informationen erweitert werden. –

Antwort

9

Sie können das nicht tun.

Wenn Sie einen dynamischen Typ möchten, zu dem Sie zur Laufzeit Mitglieder hinzufügen können, können Sie einen ExpandoObject verwenden.

Stellt ein Objekt dar, dessen Mitglieder dynamisch zur Laufzeit hinzugefügt und entfernt werden können.

Dies erfordert .NET 4.0 oder neuer.

+0

Danke, ich werde es versuchen. –

1

Haben Sie bei der Kompilierung-Zeit, um die Namen der Eigenschaften wissen? Denn Sie können dies tun:

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 
    }; 
} 

Dann:

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

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

Beachten Sie, dass dies auf die Tatsache sehr stark angewiesen, dass zwei anonyme Typen in derselben Assembly mit Eigenschaften den gleichen Namen des gleichen Typs, die in die gleiche Reihenfolge ist vom selben Typ.

Aber, wenn Sie das tun, warum nicht einfach konkrete Typen machen?

Ausgang:

True 
+1

Danke, aber ich kenne die Namen der Eigenschaften nicht. Die Eigenschaften können beliebig sein. –

Verwandte Themen