Pergunta

Eu tenho este pedaço de código em 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()));
}

Estou tentando entender qual a parte que começa com "getColumnName?" e termina com ".ToString ()" faz. Entendi que é um tipo de sistema. Eu quero isso por causa disso: "Leitor" tinha várias linhas e quero escrever apenas linhas específicas.

Se alguém puder me ajudar em qualquer um deles, eu ficaria agradecido.

Foi útil?

Solução

A função itera todas as colunas do leitor de dados e, em seguida, para cada uma:

Se getColumnName Retorna true, ele gera o nome da coluna entre o <td> tags, caso contrário, o valor dos dados.

Para desconstruir ainda mais:

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)

Outras dicas

Isto é um operador condicional. Diz se getColumnName é verdadeiro, então use reader.GetName(i) Caso contrário, use reader.GetValue(i).ToString()

O formato é o seguinte:

ThingToCheck ? UseIfCheckIsTrue : UseIfCheckIsFalse

No código, parece getColumnName é verdadeiro Para a linha do cabeçalho, por isso está emitindo o nome da coluna e chamado novamente para todas as outras linhas usando falso, para produzir os valores.

Isso é chamado de operador condicional.

O argumento getColumnName é avaliado e se for verdade, o primeiro argumento após o ? é devolvido, se falso, o segundo.

Então, se getColumnName == true, você vai ver <td>NAME</td> senão <td>Value</td>

Faz sentido?

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

Porque getColumnName é do tipo bool, então não há necessidade de testá -lo como

If (getColumnName == true)

Você pode escrever isso como

If (getColumnName)

String.Format (String, Método)

E o método String.Format substitui os itens na sequência especificada pelo objeto especificado, este método possui dois argumentos primeiro é o objeto e o segundo é o objeto. por exemplo

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

O put ser será

A pergunta número 11 é respondida por Adam ontem

Como você pode ver, {0} é substituído por 11 e {1} é substituído por Adam e {2} é substituído por ontem.

você pode ler mais sobre isso aqui

isto é operador ternário, usado para a constituição do ADHOC de se o bloco.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top