这个string.format代码片段做了什么?

时间:2010-03-28 11:35:08

标签: c# string.format

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

我试图了解以“getColumnName”开头的部分是什么?并以“.ToString()”结尾。我知道它是一个system.object类型,但我不知道它具体做了什么或它是如何工作的。 我之所以这样是因为:“读者”中有多行,我想只写特定的行。

如果有人可以帮助我,我将不胜感激。

5 个答案:

答案 0 :(得分:3)

这是conditional operator。它表示如果getColumnName为真,则使用reader.GetName(i),否则使用reader.GetValue(i).ToString()

格式如下:

ThingToCheck ? UseIfCheckIsTrue : UseIfCheckIsFalse

在代码中,标题行看起来getColumnName true ,因此它输出列名称,并使用 false ,输出值。

答案 1 :(得分:2)

该函数迭代数据阅读器中的所有列,然后对每一列进行迭代:

如果getColumnName返回true,则输出<td>标记之间的列名称,否则输出数据的值。

进一步解构:

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)

答案 2 :(得分:0)

这称为条件运算符。

评估参数getColumnName,如果为true,则返回?之后的第一个参数,如果为false,则返回第二个参数。

因此,如果getColumnName == true,您将看到<td>NAME</td>其他<td>Value</td>

有意义吗?

答案 3 :(得分:0)

就像关注

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

因为getColumnName是bool类型所以不需要像

那样测试它
If (getColumnName == true)

您可以将其写为

If (getColumnName)

String.Format(字符串,方法)

String.SFormat方法用给定对象替换指定字符串中的项,此方法有两个参数,一个是字符串,第二个是对象。 例如

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

输出将是

问题编号11由Adam Yesterday回答

如您所见,{0}替换为11,{1}替换为Adam,{2}替换为昨天。

您可以阅读有关此here

的更多信息

答案 4 :(得分:0)

这是ternary operator,用于if else阻止的特殊构成。