qu'est-ce que cette pièce string.format de code ne?
-
22-09-2019 - |
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.
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.
opérateur ternaire , utilisé pour constitution adhoc de bloc si d'autre.