Feedback

C# - Initialisiert alle String-Properties

Veröffentlicht von am 28.09.2009
(3 Bewertungen)
Dieses Snippet in einem Konstruktor eines Objektes initialisiert automatisch alle String-Properties im Objekt. Selbst wenn später welche hinzukommen werden diese automatisch mit initialisiert. Ein string der null ist führt oft zu unerwartetem Verhalten, daher lieber initialisieren...
Snippet in VB übersetzen
foreach (PropertyInfo prop in GetType().GetProperties())            // Gehe durch alle meine eigenen Properties
{
    if (prop.PropertyType == typeof(string) && prop.CanWrite)       // Wenn es sich um eine beschreibbare string-Property handelt, 
    {
        prop.SetValue(this, string.Empty, null);                    // dann setze den Wert der Property auf string.Empty (mit null argumente)
    }
}

Abgelegt unter Initialisieren, string, constructor.

4 Kommentare zum Snippet

Rainer Hilmer schrieb am 28.09.2009:
Nette Idee, aber ich finde, durch dieses Snippet wird man erst recht zur Nachlässigkeit verleitet.
Günther Foidl schrieb am 05.10.2009:
http://dotnet-snippets.de/dns/standardwerte-fuer-automatische-eigenschaften-in-net-3x-SID984.aspx
zeigt wie dies für alle Eigenschaften möglich ist die mit den speziellen Attributen versehen sind.

Aber warum sollte ein nicht initiierter String zu Problemen führen? Das ist wie bei jedem anderen Objekt auch: Prüfen auf null und konktret für den String mit string.IsNullOrEmpty. Ich sehe darin kein Problem.
Dosihris schrieb am 15.10.2009:
Doch, dass kann ein Problem sein, denn bezüglich Databinding oder auch wenn man Drittkomponenten benutzt, auf deren Quellcode man keinen Einfluss hat, kann eine null-property zu einem Problem führen. Ich arbeite in einer Software, wo null ins strings in keinem Fall sinn macht. hier wird immer und überall alles mögliche gebunden. Daher hab ich dieses Snippet gebaut. Und überall ein extra Attribut drüber machen sind 100% Zeilen mehr...
Sperneder Patrick schrieb am 15.10.2009:
@Dosihris

Ich kann die Sinnhaftigkeit auch nicht ganz nachvollziehen, ist es nicht mit 'Kanonen auf Spatzen zu schiessen' nur um sicherzugehen das eine mögliche Eigenschaft ( in deinem Fall halt, schreibbare string Eigenschaften) eines Objektes nicht 'Null' ist ?
Reflection ist langsam, das ist nichts neues, den Aufwand den du betreibst rechtfertigt eine '!NULL Überprüfung' meiner Meinung nach nicht.
Ausserdem wie du vorher gesagt hast, verwendest du Databinding, in diesem Fall ist es ja egal wenn eine Eigenschaft NULL ist. Ein NULL Wert würde doch allerhöchstens bei einem mit eingebundenen ValueConverter Probleme verursachen. Und dann auch nur wenn du hier falsch mit Null umgehst.
 

Logge dich ein, um hier zu kommentieren!