Pregunta

Tengo este pedazo de código 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()));
}

Estoy tratando de entender lo que la parte que comienzan con "getColumnName?" y termina con ".ToString ()" hace. Me entendido que es un tipo System.Object, pero no tengo ni idea de lo que hace específicamente o cómo funciona. Quiero que debido a este: "lector" tenía varias filas en ella, y quiero writeLine sólo filas específicas

.

Si alguien me puede ayudar en cualquiera de esos, te agradecería.

¿Fue útil?

Solución

Los itera función sobre todas las columnas en el lector de datos, a continuación, para cada uno:

Si se vuelve a getColumnName cierto, que emite el nombre de la columna entre las etiquetas <td>, de lo contrario el valor de los datos.

Para des-constructo además:

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)

Otros consejos

Este es un condicional operador . Se dice que si getColumnName es cierto, entonces el uso reader.GetName(i) utilizar de otro modo reader.GetValue(i).ToString()

El formato es el siguiente:

ThingToCheck ? UseIfCheckIsTrue : UseIfCheckIsFalse

En el código, parece que getColumnName es true de la fila de encabezado, por lo que es la salida del nombre de la columna y se llama de nuevo para todas las demás filas usando false , a la salida los valores.

Eso se llama un operador condicional.

El getColumnName argumento se evalúa y si es verdad, se devuelve el primer argumento después de la ?, si es falso, el segundo.

Por lo tanto, si getColumnName == true, se le va a ver otra cosa <td>NAME</td> <td>Value</td>

sentido?

Es como seguir

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

Debido getColumnName es de tipo bool así que no hay necesidad de probar que como

If (getColumnName == true)

Se puede escribir esto como

If (getColumnName)

String.Format (cadena, método)

Reemplaza

y el método String.Format artículos en cadena especificada con el objeto dado, este método tiene dos argumentos primera de ellas es la cadena y el segundo es objeto. por ejemplo

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

El apagada, será

La pregunta número 11 es contestada por Adam Ayer

Como se puede ver {0} se reemplaza con 11 y {1} se reemplaza con Adán y {2} se sustituye con el ayer.

Puede leer más sobre este aquí

este es ternario operador, usado para la constitución ad hoc de si el bloque más.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top