1 votes

Que fait ce bout de code string.format ?

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

J'essaie de comprendre ce que fait la partie qui commence par "getColumnName ?" et se termine par ".ToString()". J'ai compris que c'est un type system.object, mais je n'ai aucune idée de ce qu'il fait spécifiquement ou comment il fonctionne. Je veux cela à cause de ceci : Le "lecteur" contenait plusieurs lignes et je veux écrire seulement des lignes spécifiques.

Si quelqu'un peut m'aider sur l'un ou l'autre de ces points, je lui en serai reconnaissant.

3voto

Nick Craver Points 313913

Il s'agit d'un opérateur conditionnel . Il est dit que si getColumnName est vrai, alors utilisez reader.GetName(i) sinon, utiliser reader.GetValue(i).ToString()

Le format est le suivant :

ThingToCheck ? UseIfCheckIsTrue : UseIfCheckIsFalse

Dans le code, cela ressemble à getColumnName es verdadero pour la ligne d'en-tête, de sorte qu'elle affiche le nom de la colonne et est appelée à nouveau pour toutes les autres lignes à l'aide de la fonction faux pour sortir les valeurs.

2voto

Oded Points 271275

La fonction itère sur toutes les colonnes du lecteur de données, puis pour chacune d'entre elles :

Si getColumnName retourne vrai, il sort le nom de la colonne entre les champs <td> sinon la valeur des données.

Pour déconstruire davantage :

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)

0voto

Sky Sanders Points 19557

Cela s'appelle un opérateur conditionnel.

L'argument getColumnName est évaluée et, si elle est vraie, le premier argument après la balise ? est retournée, si elle est fausse, la seconde.

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

C'est logique ?

0voto

Kashif Points 3900

C'est comme suivre

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, il n'est pas nécessaire de le tester comme suit

If (getColumnName == true)

Vous pouvez l'écrire comme suit

If (getColumnName)

String.Format(string, method)

Et la méthode String.Format remplace les éléments de la chaîne spécifiée par un objet donné, cette méthode a deux arguments : le premier est une chaîne et le second un objet. Par exemple

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

Le résultat sera

La question numéro 11 est répondue par Adam Yesterday

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

vous pouvez en savoir plus à ce sujet aquí

0voto

vittore Points 8364

C'est opérateur ternaire utilisé pour la constitution adhoc du bloc if else.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X