Zusammengesetzte Eigenschaften mal anders

Kürzlich wurde ich gefragt wie ich folgende Aufgabe lösen würde:

Ich habe eine Personenklasse, welche Vorname, Nachname, Titel, usw. als Eigenschaften enthält und es soll anschließend eine Eigenschaft erstellt werden, welche diese Eigenschaften als String ausgibt.

Das Ganze soll natürlich so gelöst sein, dass, wenn eine der Eigenschaften leer ist keine überflüssigen Leerzeichen ausgegeben werden.

Der naive Ansatz wäre natürlich der gewesen:

return string.Format("{0} {1} {2} {3}",
    Title, FirstName, MiddleName, LastName);
nur bleiben mit dieser Implementierung eben genau die überflüssigen Leerzeichen stehen, wenn eine der Eigenschaften leer ist.

Dies könnte man lösen, indem man Replace und Trim des String-Objektes verwendet oder etwas Regex-Magie anwenden würde. Ich persönlich finde solche String Manipulationen aber nicht sonderlich elegant.

Andere Ansätze würden eine erquickliche Anzahl an if-Abfragen beinhalten und man müsste darauf achten dass die Leerzeichen an den richtigen Stellen eingefügt werden. Wartbar ist das Ganze auch nur bedingt.

Meine Implementierung würde so aussehen:

public string FullName
{
    get
    {
        var elements = new string[] { Title, FirstName, MiddleName, LastName };
        return string.Join(" ", elements
            .Where(e => !string.IsNullOrWhiteSpace(e)));
    }
}

Das elements-Array beinhaltet die Strings in der Reihenfolge wie sie ausgegeben werden sollen.
Der Join mit der LINQ-Abfrage sorgt dafür, dass nur die Elemente, welche nicht leer sind oder keine Leerzeichen beinhalten, ausgewählt werden und „vereint“ diese mit einem Leerzeichen getrennt.


Kommt nun eine weitere Eigenschaft hinzu, kann man diese einfach in das elements-Array an der gewünschten Position einfügen.

Tagged ,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: