Question

J'ai ce morceau de code en 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()));
}

Je suis en train de comprendre ce que la partie qui commencent par « getColumnName? » et se termine par « .toString () » fait. Je compris qu'il est un type System.Object, mais je ne sais pas ce qu'il fait spécifiquement ou comment il fonctionne. Je veux qu'en raison de ceci: « lecteur » avait plusieurs lignes en elle, et je veux writeLine uniquement les lignes spécifiques

.

Si quelqu'un peut me aider ou l'autre de ceux-ci, je serais reconnaissant.

Était-ce utile?

La solution

La fonction effectue une itération sur toutes les colonnes dans le lecteur de données, puis pour chacun d'eux:

Si getColumnName retourne true, il émet le nom de la colonne entre les balises <td>, sinon la valeur des données.

Pour déconstruire plus:

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)

Autres conseils

Ceci est un opérateur conditionnel . Il dit que si getColumnName est vrai, puis utilisez reader.GetName(i) utiliser autrement reader.GetValue(i).ToString()

Le format est le suivant:

ThingToCheck ? UseIfCheckIsTrue : UseIfCheckIsFalse

Dans le code, il ressemble à getColumnName est true pour la ligne d'en-tête, il est donc sortie le nom de colonne et a appelé à nouveau pour toutes les autres lignes à l'aide false , à la sortie les valeurs.

On appelle un opérateur conditionnel.

Le getColumnName argument est évalué et si cela est vrai, le premier argument après la ? est retournée, si elle est fausse, le second.

Donc, si getColumnName == true, vous allez voir <td>NAME</td> autre <td>Value</td>

sens?

Il est comme suivant

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()
}

Parce que getColumnName est de type bool donc pas besoin de le tester comme

If (getColumnName == true)

Vous pouvez écrire cela comme

If (getColumnName)

String.Format (chaîne, procédé)

et la méthode de String.Format remplace les articles dans la chaîne spécifiée avec l'objet donné, ce procédé présente deux arguments première est une chaîne et un second objet est. par exemple

string.Format("Question number {0} is answered by {1} {2}", 11, "Adam", "Yesterday");

VERSE out sera

Question numéro 11 est répondu par Adam Hier

Comme vous pouvez le voir {0} est remplacé par 11 et {1} est remplacé par Adam et {2} est remplacé par hier.

vous pouvez en savoir plus sur ce

opérateur ternaire , utilisé pour constitution adhoc de bloc si d'autre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top