2011-01-13 12 views
0
public class myclass 
{ 
    public int mymember { get; set; } 
} 

class MySetterClass<T> 
{ 
    // obj.mymember = o for myclass 
    public static void SetMember(string membername, object o, ref T obj) 
    { 
    } 
} 

Kann ich dies mit Reflection API tun?Einstellung eines Mitglieds des generischen Objekts?

Ich habe eine generische Klasse und ich möchte ein Mitglied einer Instanz festlegen.

Vielen Dank im Voraus!

+2

Ist es immer eine Eigenschaft? Und warum passierst du 'obj' als Referenz? – Ani

+0

Ich habe ein Myclass Objekt obj und ich möchte meinMember als 5 setzen. Ist es möglich, es mit MySetterClass auf eine andere Weise zu machen, indem Sie es nicht durch ref übergeben? Es ist immer Eigentum und wenn es auf andere Art und Weise getan werden könnte, würde ich sie gerne hören :) – Kubi

+0

Sie wissen, der Reflection-Code ist der gleiche, unabhängig davon, ob es generisch ist. – Gabe

Antwort

0

Sie können, aber ich würde davor warnen. Sie machen im Wesentlichen ein End-Run rund um das Typ-Sicherheitssystem, und es gibt viele Fallstricke.

Wenn Sie müssen, ist der Code so etwas wie dies unter der Annahme, dass das betreffende Mitglied ein Eigentum ist und kein Feld:

typeof(T).GetProperty(membername).SetValue(obj, o); 
+2

Sie können 'obj.GetType()' anstelle von 'typeof (T)' verwenden und es spielt keine Rolle, ob es generisch ist. – Gabe

+0

Absolut, einverstanden. –

0

Ja, Sie können. Wenn Sie dies jedoch ohne Reflektion tun können, wäre das am besten, da die Reflektion langsam, mühsam und schwieriger zu lesen ist und möglicherweise darauf hinweist, dass Ihr Design fehlerhaft ist.

Ich muss fragen, was Ihr ultimatives Ziel mit diesem Code ist? Möchten Sie wirklich nur eine Methode verwenden, die ein Mitglied basierend auf einer Zeichenfolge festlegt, die dieses Mitglied benennt? Oder möchten Sie in der Lage sein, einen Member auf einen generischen Typ festzulegen, aber Sie wissen, was es zur Kompilierzeit ist? Wenn es das Letztere ist, dann wäre die Verwendung von generic constraints etwas, das einen Blick wert wäre. Sie ermöglichen dem Compiler, die Mitglieder eines Objekts eines generischen Typs zum Zeitpunkt der Kompilierung zu kennen.

Verwandte Themen