2016-08-11 6 views
-1
private void add_value_to_row(client_file client_file, ref StringBuilder OutputCustomer, String value) 
{ 
    if (client_file.output_format == "txt") 
     if (value = "the first value in add_value_to_row") 
     OutputCustomer.AppendFormat("{0}", value); 
     else if (value = "every other value in add_value_to_row") 
     OutputCustomer.AppendFormat("\t{0}", value); 
} 

Ich habe eine Funktion geschrieben oben, die Eingaben von "x" und erstellt Datenzeilen im TXT-Format gemäß dem unten stehenden Code. Ich habe mich gefragt, wie ich die verschachtelten if-Anweisungen schreiben könnte, damit sie das ausführen, was in Anführungszeichen steht? Die endgültige Ausgabe gemäß den folgenden Daten sollten Ausgabe OutputCustomer.AppendFormat("{0}\t{1}\t{2}\t{3}\t{4}", x.url, x.company, x.Country, x.vendor, x.product);Format Struktur für StringBuilder

OutputCustomer = new StringBuilder(); 

add_value_to_row(clientInfo.cf, ref OutputCustomer, x.url); 
add_value_to_row(clientInfo.cf, ref OutputCustomer, x.company); 
add_value_to_row(clientInfo.cf, ref OutputCustomer, x.Country); 
add_value_to_row(clientInfo.cf, ref OutputCustomer, x.vendor); 
add_value_to_row(clientInfo.cf, ref OutputCustomer, x.product); 
+1

es ist immer noch unklar, was Sie genau hier fragen? – Rahul

+0

Es ist schwierig, die Absicht von "dem ersten Wert add_value_to_row" zu verstehen, da "add_value_to_row" eher eine Methode als eine Sammlung zu sein scheint. Wollen Sie damit sagen, dass die Methode erraten soll, an welche Eigenschaft Sie diese übergeben haben? "StringBuilder" ist übrigens eine Klasse, keine Struktur. Keine Notwendigkeit, an "ref" vorbeizugehen –

Antwort

0

Warum fügen Sie die Elemente nacheinander? Gib dein Objekt der Methode und lass es entscheiden.

private void add_value_to_row(client_file client_file, ref StringBuilder OutputCustomer, YourType value) 
{ 
    if (client_file.output_format == "txt") 

    OutputCustomer.AppendFormat("{0}\t{1}\t{2}\t{3}\t{4}", 
    value.url,value.company,value.Country,value.vendor,value.product); 

} 

Und nennen Sie es wie dieser

add_value_to_row(clientInfo.cf, ref OutputCustomer, x); 

Andernfalls müssen Sie eine Bool geben oder int in die Methoden signiture

aktualisieren

Wenn Sie wirklich Ihr haben wollen Methode die Art, wie es ist, benötigen Sie eine Boolean in der signature

private void add_value_to_row(client_file client_file, ref StringBuilder OutputCustomer, String value, bool isFirst=false) 
{ 
    if (client_file.output_format == "txt") 
     if (isFirst) 
     OutputCustomer.AppendFormat("{0}", value); 
     else 
     OutputCustomer.AppendFormat("\t{0}", value); 
} 

Und es nennen wie diese

add_value_to_row(clientInfo.cf, ref OutputCustomer, x.url, true); 
add_value_to_row(clientInfo.cf, ref OutputCustomer, x.company); 
add_value_to_row(clientInfo.cf, ref OutputCustomer, x.Country); 
add_value_to_row(clientInfo.cf, ref OutputCustomer, x.vendor); 
add_value_to_row(clientInfo.cf, ref OutputCustomer, x.product); 

beachten Sie auch, dass Sie es als optionaler Parameter haben kann, so dass Sie es nicht schreiben müssen jedes Mal

+0

Ich schrieb nur 5 Einzelteile, um das Beispiel kurz zu machen, aber es gibt wirklich viel mehr im tatsächlichen Code. Ich musste nur die if-Anweisungen schreiben, so dass das erste Element formatiert {0} und dann Ruhe ist \ t {0} –

+0

@LucasHan überprüfen Sie das Update –

+0

Danke, das, was ich gesucht habe! –

0

Es sieht aus wie Sie versuchen, Erstellen einer durch Tabulatoren getrennten Ausgabezeile Ein einfacher Weg, es zu tun wäre:

string outputCustomer = string.Join("\t", new {x.url, x.company, x.Country, x.vendor, x.product}); 

Siehe String.Join.