我在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类型,但我不知道它具体做了什么或它是如何工作的。 我之所以这样是因为:“读者”中有多行,我想只写特定的行。
如果有人可以帮助我,我将不胜感激。
答案 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阻止的特殊构成。