4 Stimmen

Null-Objekt-Muster für FileInfo

Ich habe eine Methode, die ein FileInfo-Objekt zurückgibt. Nachdem die Methode aufgerufen wurde, wird fooFile.FullName aufgerufen.

Alles gut, aber es gibt einen Fall, in dem FileInfo null sein kann, aber ich möchte keine (hässlichen) Null-Checks, wo die Methode aufgerufen wird.

Was ich brauche, ist eine Art Null-FileInfo (Null-Object-Pattern). Es würde ausreichen, wenn der Aufruf von fooFile.FullName einen leeren String zurückgibt. Leider funktioniert new FileInfo(string.Empty) nicht.

Die Suche auf SO brachte diese Java-Frage, aber die Antworten haben mir nicht geholfen.

Gibt es eine Möglichkeit, FileInfo in Verbindung mit dem Null-Object-Pattern zu verwenden?

4voto

Miguel Angelo Punkte 23208

Sie könnten den ??-Operator verwenden, um bei Bedarf ein Standard-FileInfo zu verwenden, mit einer statischen Variable an einer Stelle, die repräsentiert, was das Standard-FileInfo ist:

public void MyMethod(FileInfo fi)
{
    // Verwenden Sie das Standard-FileInfo, wenn null an diese Methode übergeben wird
    fi = fi ?? DefaultFileInfo.Value;

    // Methodencode...
    // Mach etwas mit dem FileInfo, es ist jetzt sicher nicht null.
}

Die Standard-Dateiinfo-Klasse:

public static class DefaultFileInfo
{
    public static readonly FileInfo Value = new FileInfo("null");
}

Wenn Sie möchten, dass die Standarddatei lesbar ist, müssen Sie natürlich einen gültigen Dateinamen angeben.

3voto

Bidou Punkte 6759

Was ist genau das Problem mit der Null-Überprüfung? Ich verstehe deinen Standpunkt nicht... Wenn du wirklich diese Null-Überprüfung vermeiden möchtest, kannst du eine Erweiterungsmethode verwenden, aber ich kann dir das nicht empfehlen...

public static class Extensions
{
    public static string GetFullName(this FileInfo fInfo)
    {
        if (fInfo == null)
        {
            return String.Empty;
        }
        return fInfo.FullName;
    }
}

Und dann

FileInfo fInfo = // ... ;
string fullName = fInfo.GetFullName();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X