was hat das string.format Stück Code tun?
-
22-09-2019 - |
Frage
Ich habe dieses Stück Code in C #:
private static void _constructRow(SqlDataReader reader, system.IO.StreamWriter stwr, bool getColumnName)
{
for (int i = 0; i < reader.FieldCount; i++)
stwr.Writeline(String.Format("<td>{0}</td"), getColumnName ? reader.GetName(i) : reader.GetValue(i).ToString()));
}
Ich versuche, was die Rolle zu verstehen, die mit „getColumnName?“ und endet mit „.ToString ()“ der Fall ist. Ich verstand, dass es ein System.Object-Typ ist, aber ich habe keine Ahnung, was es speziell tut oder wie es funktioniert. Ich möchte, dass aus diesem Grund: „Leser“ in es mehrere Reihen hatte, und ich möchte nur bestimmte Zeilen Console.WriteLine
.Wenn jemand mich auf eine dieser beiden helfen kann, ich wäre dankbar.
Lösung
Die Funktion wird über alle Spalten in der Datenleser, dann für jeden einzelnen:
Wenn getColumnName
gibt true zurück, es gibt den Namen der Spalte zwischen den <td>
Tags, sonst den Wert der Daten.
Um De-Konstrukt weiter:
reader.GetName(i) - this returns the name of the column
reader.GetValue(i).ToString() - this returns the value of the column as a string
getColumnName - a function the will return true if a column name can be gotten
?: - the conditional operator. If the expression before the ? is true, the expression to the left of the : is used, otherwise the one on the right
String.Format("<td>{0}</td", arg) - this will output "<td>arg</td>" (btw - your code is wrong, the ) should not be just after the first string)
Andere Tipps
Dies ist ein Konditionaloperator . Er sagt, wenn getColumnName
wahr ist, dann anderweitig Verwendung reader.GetName(i)
verwenden reader.GetValue(i).ToString()
Das Format ist dies:
ThingToCheck ? UseIfCheckIsTrue : UseIfCheckIsFalse
Im Code sieht es aus wie getColumnName
ist true für die Kopfzeile, so dass es den Spaltennamen ausgibt und wieder für alle anderen Reihen genannt mit false , zur Ausgabe die Werte.
Das ist ein bedingter Operator genannt.
Das Argument getColumnName
ausgewertet und wenn sie wahr ist, das erste Argument nach dem ?
zurückgegeben wird, wenn er falsch ist, die zweite.
Also, wenn getColumnName == true, du gehst <td>NAME</td>
sonst <td>Value</td>
Sinn?
Es ist wie folgt
if (getColumnName == true)
{
reader.GetName(i); // GetName is string so no need to convert this in string I.E ToString()
}
else
{
reader.GetValue(i).ToString(); // GetValue returns object so this needs to convert in string using .ToString()
}
Da getColumnName ist von Bool Typ, so dass keine Notwendigkeit, es zu testen, wie
If (getColumnName == true)
Sie können dies als
schreibenIf (getColumnName)
String.Format (string, Methode)
Und String.Format Methode ersetzt Elemente in bestimmten Zeichenfolge mit bestimmten Objekt, diese Methode hat zwei Argumente erste String ist und das zweite ist Objekt. zum Beispiel
string.Format("Question number {0} is answered by {1} {2}", 11, "Adam", "Yesterday");
Die außer Betrieb gesetzt werden
Frage Nummer 11 wird von Adam Gestern beantwortet
Wie Sie {0} sehen mit 11 ersetzt ist und {1} ist mit Adam ersetzt und {2} ersetzt wird mit Yesterday.
Sie können mehr über diese hier
lesenDas ist ternäre Operator , verwendet für Ad-hoc-Verfassung, wenn auch Block.