我在我的系统中使用了这部分代码。
double countA = 0.00;
double countB = 0.00;
if (myrow.grade == "A")
{
countA += 1.00;
}
else if (myrow.grade == "B")
{
countB += 1.00;
}
countALabel.Text = Convert.ToString(countA);
countBLabel.Text = Convert.ToString(countB);
代码应该计算我的 examMarks 表中有多少学生获得“A”或“B”并使用标签显示它。但是,即使有学生在我的桌子上获得“A”和“B”,我也会继续获得0
价值?
我如何获得增量值?
答案 0 :(得分:3)
您必须在循环外放置前两行和最后两行:
double countA = 0.00;
double countB = 0.00;
foreach (MyRow myrow in rows)
{
if (myrow.grade == "A")
{
countA += 1.00;
} else if (myrow.grade == "B")
{
countB += 1.00;
}
}
countALabel.Text = Convert.ToString(countA);
countBLabel.Text = Convert.ToString(countB);
通过将它们全部放在循环中,你总是只检查最后一个等级,这可能既不是A也不是B,因此两者都得到0。
答案 1 :(得分:2)
我认为不会以某种方式执行IF语句中的代码。 代码+ =确实应该增加值。
您可能希望使用以下忽略大小写的代码:
if (myrow.grade.Equals("A", StringComparison.OrdinalIgnoreCase) { }
答案 2 :(得分:2)
为了进行比较,您的表值可能会有空格,因此请在代码中使用以下Trim()
函数:
if(myrow.grade.ToUpper().Trim() == "A")
或@ Aphelion的答案,包括Trim():
if (myrow.grade.Trim().Equals("A", StringComparison.OrdinalIgnoreCase) { }
答案 3 :(得分:1)
请检查您在countA和countB上的增量是否实际执行。我怀疑这可能是使用==而不是字符串上的.equals的问题。
答案 4 :(得分:1)
我重构了你的代码。我希望你不介意。
double countA= 0.00;
double countB= 0.00;
int test= 0;
string entry= myrow.grade.Trim().ToUpper();
switch(entry)
{
case "A":
countA++;
break;
case "B":
countB++;
break;
default:
test++;
}
countALabel.Text = Convert.ToString(countA);
countBLabel.Text = Convert.ToString(countB);
我添加了一个'test'变量,它会告诉您问题是在代码内还是代码外。另外,尝试设置断点并观察'myrow.grade'的值。古德勒克!