2009-05-18 17 views
0

Ich bin ziemlich neu in C#, und zu versuchen, String Einfügungen, um herauszufinden, (dh "some {0} string", toInsert) und über ein Problem lief ich nicht erwartet habe ...C# String Einfügungen mit optionalen Parametern verwirrten

Im Fall wo haben Sie zwei Konstruktoren:

public MyClass(String arg1) { ... } 

public MyClass(String arg1, String arg2) { ... } 

Ist es möglich für mich, den ersten Konstruktor mit einer Zeichenfolge einfügen zu verwenden?

... 
toInsert = "def" 
myClass = new MyClass("abc{0}ghi", toInsert) 
... 

Oder wird C# diese als zweite Konstruktor interpretieren und eine wörtliche "abc{0}ghi" als erstes Argument übergeben?

Antwort

9

Ja, dies wird nur als zweiter Parameter interpretiert.

Das von Ihnen beschriebene Verhalten wird als String-Formatierung bezeichnet, und alles, was Zeichenfolgen in diesem Stil akzeptiert, verwendet string.Format() im Hintergrund. Einzelheiten finden Sie in der Dokumentation dieser Methode.

das gewünschte Verhalten zu erhalten, verwenden Sie diesen Code:

myClass = new MyClass(string.Format("abc{0}ghi", toInsert)); 
+0

eigentlich der erste Konstruktor nehmen, String.Format(), um StringBuilder.AppendFormat ruft() –

+0

Also sollte ich wickle immer meine Formatierung in string.Format(), um Fehler auf der Straße zu vermeiden, wo Klassen mit einem Konstruktor einen neuen bekommen? – tgray

+0

Nein, das ist eine ungerechtfertigte Schlussfolgerung. new MyClass (A) ruft den ctor auf, der einen param akzeptiert, und new MyClass (A, B) ruft den ctor auf, der 2 params akzeptiert, unabhängig davon, was Sie für A und B ersetzen. Sie haben "abc {0} ghi" für A verwendet Dies ändert nichts an der Tatsache, dass du 2 Params bestanden hast. – Cheeso

5

Just do:

public MyClass(string format, params object[] args) 
{ 
    this.FormattedValue = string.Format(format, args); 
} 
2

Oder wird C# interpretieren dies als zweite Konstruktor und eine wörtliche „abc passieren {0} ghi "als erstes Argument?

Dies ist die richtige Antwort. Ich denke, wenn Sie String.Format ("abc {0} ghi", toInsert) verwenden, dann wird es

Verwandte Themen