Bevorzugte Weg, um die Standardwerte der null-Eigenschaften?
Ich bin in einem dilemma. Die (reduzierte) Aufgabe ist die Umgestaltung der folgende Daten der Inhaber Klasse
class Stuff
{
public String SomeInfo { get; set; }
}
um die Nachfrage zu befriedigen, dass null darf nicht zurückgegeben werden. Ich denke, der kann zwei Wege, das zu erreichen und nach tiefer überlegung von 15 Minuten, ich kann einfach nicht entscheiden, welche zu bevorzugen ist.
Ansatz Konstruktor.
class Stuff
{
public String SomeInfo { get; set; }
public Stuff() { SomeInfo = String.Empty; }
}
Ansatz von Eigentum.
class Stuff
{
private String _SomeInfo;
public String SomeInfo
{
get { return _SomeInfo ?? String.Empty; }
set { _SomeInfo = value; }
}
}
Beachten Sie, dass die Erstellung der Zeug Instanzen getan werden könnte, verwenden Sie den Konstruktor sowie die Initialisierung, wenn das von Bedeutung. Soweit ich informiert bin, wird es keine anderen Einschränkungen (aber Sie wissen, wie die Kunden-Spezifikationen spiegeln nicht immer die Realität).
- Gut - Ihre erste option, die nicht Ihren Anforderungen entsprechen - wie kann ich trotzdem setzen Sie die Eigenschaft auf null. #2 ist die einzige wirkliche Wahl.
- Wenn durch die Initialisierung du meinst eine form der Deserialisierung bewusst sein, dass einige Umsetzungen nicht ausführen Konstruktor-code.
- Ein weiterer kleiner Geschmack auf #2 könnte der überprüfung von Eingaben bei der Einstellung der Wert anstelle der beim abrufen. Wenn Sie finden, Sie abrufen
null/Empty
Werte sehr oft, anstatt zu tun, die Prüfung einmal/selten auch bei der Einstellung bevorzugt werden. EDIT: Beachten Sie, dass hier davon ausgegangen, du bist wachsam genug, nicht um das sichern-Feld auf null. - Gute Punkte. Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nur dafür sorgen, dass
null
wird nie zurückgegeben, wenn Sie die Eigenschaft zu verwenden:Den gleichen Ansatz verwendet, indem Sie text-Steuerelemente(z.B. in ASP.NET), wo die
Text
Eigenschaft kehrt nie zurücknull
aberString.Empty
.Beispielsweise(ILSpy):
Können Sie auch implementieren die Logik, die in den setter, eher als in der getter, die Ihre back-Feld muss immer ein Gültiger Wert
if
überprüfen zu setzenString.Empty
anstatt nichts zu tun. Zum Beispiel:myStuff.SomeInfo = "Hello!"; myStuff.SomeInfo = null; Console.WriteLine(myStuff.SomeInfo); //prints Hello!
EDIT: Wahrscheinlich so einfach wie_someInfo = value ?? String.Empty;
String.Empty
im Einklang mit den Verhaltens-OP demonstriert jetzt.Nur um eine weitere Antwort auf diese, Sie können auch einen Standard-Wert in ein string-Objekt in eine einzelne Anweisung;