Setzen eines Properties per Reflection

Ab und an kann es nützlich sein, Properties einer Klasse per Reflection setzen zu können. Dazu ist lediglich folgender Code nötig:


public void SetProperty( string nameOfProperty, object value )
{
    PropertyInfo propertyInfo = GetType().GetProperty( nameOfProperty, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase );
            
    if( propertyInfo == null )
        throw new NullReferenceException( string.Format( "Die Eigenschaft {0} konnte nicht gefunden werden!", nameOfProperty ) );

    Type propertyType = propertyInfo.PropertyType;
    propertyInfo.SetValue( this, Convert.ChangeType(value, propertyType), null );
}

Beispiel:


public class Person
{
    public string Vorname { get; set; }
    public string Nachname { get; set; }

    public override string ToString()
    {
        return string.Format("{0}, {1}", Nachname, Vorname);
    }

    public void SetProperty( string nameOfProperty, object value )
    {
        PropertyInfo propertyInfo = GetType().GetProperty( nameOfProperty, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase );
            
        if( propertyInfo == null )
            throw new NullReferenceException( string.Format( "Die Eigenschaft {0} konnte nicht gefunden werden!", nameOfProperty ) );

        Type propertyType = propertyInfo.PropertyType;
        propertyInfo.SetValue( this, Convert.ChangeType(value, propertyType), null );
    }
}


class Program
{
    static void Main(string[] args)
    {
        Person person = new Person();
        person.SetProperty("Vorname", "Thorsten");
        person.SetProperty("Nachname", "Vogt");
        Console.WriteLine(person); // Ausgabe: Vogt, Thorsten
    }
}


Kick It auf dotnet-kicks.de

Leave a Reply

Your email address will not be published.


*