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.

War es hilfreich?

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>

sehen

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

schreiben
If (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

lesen

Das ist ternäre Operator , verwendet für Ad-hoc-Verfassung, wenn auch Block.

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