Ich lese Effektive C# von Bill Wagner. In Punkt 14 - Minimieren Doppelte Initialisierung Logic, zeigt er das folgende Beispiel die neuen optionalen Parameter mithilfe der Funktion in einem Konstruktor:Kann String.Empty nicht als Standardwert für einen optionalen Parameter verwenden
public MyClass(int initialCount = 0, string name = "")
Beachten Sie, dass er ""
statt string.Empty
verwendet.
Er kommentiert:
Sie werden bemerken, [in einem Beispiel oben], dass der zweite Konstruktor angegeben „“ für den Standardwert auf den Namen Parameter, anstatt die üblichen
string.Empty
. Das liegt daran, dassstring.Empty
keine Kompilierzeitkonstante ist. Es ist eine statische Eigenschaft, die in der String-Klasse definiert ist. Da es sich nicht um eine Kompilierkonstante handelt, können Sie sie nicht als Standardwert für einen Parameter verwenden.
Wenn wir die Statik nicht in allen Situationen verwenden können, hat das dann nicht den Zweck? Ich dachte, wir würden es benutzen, um sicher zu sein, dass wir eine systemunabhängige Methode haben, auf die leere Zeichenfolge zu verweisen. Ist mein Verständnis falsch? Vielen Dank.
UPDATE
Nur ein Follow-up-Kommentar. Nach MSDN:
Jeder optionale Parameter hat einen Standardwert als Teil seiner Definition. Wenn für diesen Parameter kein Argument gesendet wird, wird der Standardwert verwendet. Standardwerte müssen Konstanten sein.
Dann werden wir System.Environment.NewLine
nicht in der Lage sein, entweder zu verwenden oder neu instanziiert Objekte als Standardwert verwenden. Ich habe VS2010 noch nicht benutzt, und das ist enttäuschend!
Mir sind keine Unterschiede zwischen der Darstellung leerer Strings auf verschiedenen Plattformen bekannt. Es ist nicht wie Newline. –
Richtig, ich dachte das, also ist es nur, dass es im Code schöner aussieht? – Mikeyg36
Die CLR und nicht das 'System' ist der ausschlaggebende Faktor, ob "" eine leere Zeichenfolge ist oder nicht. Ich denke also, Sie können sicher davon ausgehen, dass das "" eine systemunabhängige Methode ist, um auf eine Zeichenfolge bei einer konformen CLR-Implementierung zu verweisen. –