我有一个简单的表单,它接受来自11个问题的单选按钮选择(1-5)的数字,并将值作为varchar(10)数据发布到数据库中。我打算将用户发送到一个结果页面,该页面通过一个简单的for循环列出这些分数的总和,但是当我尝试将数据解析为整数格式时,由于错误解析,结果只会为零。这是我的代码示例:
// Q1 - Q11 are the questions in my Db, using Model property
int sum = 0;
int temp = 0;
String question;
for (int i = 11; i >= 1; i--)
{
question = "Model.Q" + i.ToString();
temp = int.Parse(question);
sum += temp;
}
return sum;
奇怪的是,如果我分别解析它们,例如编写:
Int32.TryParse(Model.Q5, out temp);
我能够解析数据就好了。我的控制台显示循环将question
变量保持为"Model.Qx"
,并用引号引起了总和,最终导致0
。我也尝试过使用Int32.TryParse();
,除了处理错误外,结果没有区别。
如果字符串包含与i
变量串联的标点符号,是否可以不对字符串进行简单解析?或者我在这里遗漏了其他内容吗?我想避免单独解析每个问题,因为它在代码中看起来很丑陋。
谢谢。
答案 0 :(得分:2)
您的问题是,您试图通过使用具有相同名称的字符串来访问变量。这将无法正常工作,就像名称gitgecko
不是 you 一样。
如果模型具有多个名称相似的属性,则可以编写一个函数在它们之间进行切换:
object GetQ(int number)
{
switch(number)
{
case 1: return Model.Q1;
case 2: return Model.Q2;
// etc...
}
}
或者您可以更改模型以将这些变量存储在数组或列表中,或者适当的方式。
例如,如果您当前拥有:
class Model
{
string Q1;
string Q2:
// repeated 11 times
您可能会:
class Model
{
string[] Q = new string[11];
}
这使您可以执行Model.Q[x]