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

Visual Studio, IIS und Skype

Wer ein Webprojekt in Visual Studio via IIS starten möchte und Skype installiert hat, kann unter Umständen folgende Fehlermeldung bekommen:

Ein Blick in den IIS – Manager zeigte, dass die Standardwebsite gestoppt war. Ein Starten der Website war nicht möglich. Der für die Website konfigurierte Port 80 wurde offensichtlich durch eine andere Anwendung blockiert.

Die Ursache lag bei mir in der Konfiguration von Skype. Standardmäßig ist da der Port 80 als Listener für eingehende Verbindungen eingestellt.

Ein deaktivieren der Option und Neustart von Skype behebt das Problem. Natürlich muss die Website im IIS-Manager anschließend noch gestartet werden.

Bei der Fehlersuche erwies sich hier TCPView als äußerst nützlich.