Reflektives schreiben eines struct-Property

08/07/2008 - 10:59 von Daniel | Report spam
Hallo

Ich hab das Problem, dass ich reflektiv Properties aus Objekten anzeigen und
dem User zum Editiern zur Verfügung stellen muss (nein, ich kann nicht das
PropertyGrid brauchen...).
Das Property einer Instanz einer Klasse geht ohne Probleme, jedoch nicht von
einer Instanz eines struct.
Wenn in untenstehendem Code S1 zu einer class (statt struct) gemacht wird,
dann funktioniert das Ändern von myS.MyInt, jedoch nicht, wenn S1 ein struct
ist.

Kann mir jemand sagen wie ich das für eine Instanz eines struct hinkriege?

Danke im Voraus
Daniel


private void btnTest_Click( object sender, EventArgs e )
{
S1 myS = new S1( 9, "start" );
Type t = myS.GetType();
PropertyInfo pi = t.GetProperty( "MyInt" );
pi.SetValue( myS, 33, null );
}

struct S1
{
int myInt;
string myStr;
public int MyInt { get { return myInt; } set { myInt =
value; } }
public string MyString { get { return myStr; } set { myStr =
value; } }
public S1( int i, string s ) { myInt = i; myStr = s; }
}
 

Lesen sie die antworten

#1 Herfried K. Wagner [MVP]
11/07/2008 - 02:49 | Warnen spam
"Daniel" schrieb:
Ich hab das Problem, dass ich reflektiv Properties aus Objekten anzeigen
und dem User zum Editiern zur Verfügung stellen muss (nein, ich kann nicht
das PropertyGrid brauchen...).
Das Property einer Instanz einer Klasse geht ohne Probleme, jedoch nicht
von einer Instanz eines struct.
Wenn in untenstehendem Code S1 zu einer class (statt struct) gemacht wird,
dann funktioniert das Ändern von myS.MyInt, jedoch nicht, wenn S1 ein
struct ist.



Du mußt den Wertetyp "boxen":

\\\
S1 myS = new S1(9, "start");
Type t = myS.GetType();
object o = (object)myS;
PropertyInfo pi = t.GetProperty("MyInt");
pi.SetValue(o, 33, null);
MessageBox.Show(((S1)o).MyInt.ToString());
///

M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>

Ähnliche fragen