Frage

Ich habe ein kleines Stück Code (siehe unten), die die Zeichenfolge zurückgibt:

string.Format("{0}----{1}",3,"test 2");

so wie bekomme ich dies tatsächlich zu „Ausführen“? Zu laufen und tun das Format / Ersatz {0} und {1}?

Ihr Code-Snippet:

StringBuilder sb = new StringBuilder();
sb.Append("{0}----{1}\",");
sb.AppendFormat(ReturnParamValue(siDTO, "siDTO.SuggestionItemID,siDTO.Title"));
string sbStr = "=string.Format(\""+sb.ToString()+");";

ja, ReturnParamValue gibt den tatsächlich Wert des DTO.

Wie auch immer, ich habe einen Blick auf die folgende genommen (aber es sagt nicht, wie es auszuführen: Wie String.Format bekommen nicht analysieren {0}

Vielleicht soll ich nur meinen Code-Schnipsel in einem Verfahren stellen. Aber was dann?

War es hilfreich?

Lösung

Warum auch Sie String.Format im String selbst?

Wenn Sie suchen für eine generische „lassen Sie mich beurteilen diese willkürliche Ausdruck Ich habe in einem String aufgebaut“, dann gibt es keine einfache Antwort.

Wenn stattdessen Sie suchen, wie die Parameter für die Zeichenfolge aus einem Funktionsaufruf zur Verfügung zu stellen, dann musst du dich alle verdreht und zu hart arbeiten.

Versuchen Sie so etwas wie dies, basierend auf dem ursprünglichen Code:

string result
    = string.Format(
        "{0}----{1}",
        ReturnParamValue(siDTO, "siDTO.SuggestionItemID,siDTO.Title"));

Obwohl dies nicht vollständig funktionieren, da Ihr ursprünglicher Code scheint einen einzigen Wert nur zur Verfügung stellen, und Sie haben zwei Werte in der Format-String - die {0} wird mit dem Wert aus Ihrer Funktion ersetzt werden, und {1} unverändert gelassen .

Was Ausgabe erwarten Sie?

Hat Ihre ReturnParamValue() Funktion versuchen sowohl das Etikett und den Wert in einem einzigen String zurück? Ist dies der Fall, und wenn sie es durch Komma getrennt, dann könnte man versuchen, diese:

var value = ReturnParamValue(siDTO, "siDTO.SuggestionItemID,siDTO.Title"));
var pieces = string.Split(',');
string result
    = string.Format( "{0}----{1}", pieces[0], pieces[1]);

Obwohl dies ernsthaft arbeitet zu hart, wenn ReturnParamValue() ist eine Methode, die Sie steuern.

Update Fr 6. August

Überprüfen Sie die Erklärung aus für string.Format() wie auf MSDN gezeigt:

public static string Format(
    string format,
    params Object[] args
)

Im Gegensatz zu dem speziellen Gehäuse Sie printf() in C gesehen haben, gibt es nichts besondere oder ungewöhnliche über die Art und Weise string.Format() Griffe mehr Parameter. Der Schlüssel ist das params Schlüsselwort, das den Compiler fordert eine bereitzustellen wenig "syntaktischer Zucker" , wo sie die Parameter in einem Array für Sie vereint.

Key hier ist, dass die Verpackung nicht geschieht, wenn Sie bereits eine einzige object[] vorbei - also, wenn Sie wollten, Sie so etwas tun könnte:

object[] parameters 
    = ReturnParamValues(siDTO, "siDTO.SuggestionItemID,siDTO.Title");
string result
    = string.Format("{0}----{1}----{2}", parameters);

Obwohl, wenn ich sehe etwas wie dies in jeder Codebasis ich beibehalten, würde ich es als Code-Geruch und auf der Suche nach einem besseren Weg wird die Behandlung des Problem zu lösen.

Nur weil es möglich bedeutet nicht, es ist ratsam . YMMV, natürlich.

Andere Tipps

Ich glaube nicht, dass Sie es ausführen können. Java ist nicht wirklich eine interpretierte Sprache sein.

Sie können die Verwendung von Skriptsprachen machen (die auch in Ihrer Java-Anwendung einbetten können, wie ich weiß, beginnen JDK6) für diesen Zweck, wie Groovy

Sie können RegEx verwenden, um die drei Parameter aus der Zeichenfolge zu analysieren und sie dann weitergeben an eine reale, wirkliche string.Format Methode: -)

Es sieht aus wie das, was Sie wollen, so etwas wie diese:

string sbStr = string.Format("{0}----{1}", siDTO.SuggestionItemID, siDTO.Title);

Vielleicht verstehe ich Ihre Frage nicht ganz, aber es klingt wie Sie ein Format-String formatiert werden müssen. Wenn das stimmt könnte man vielleicht so etwas wie diese versuchen:

int width = 5;
string format = String.Format("{{0,{0}}}----{{1,{0}}}", width);
string result = String.Format(format, "ab", "cd");

Also der Trick ist einfach die { oder } zu entkommen, indem sie eine doppelte {{ oder }} verwendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top