在for循环中使用“ Model.x”属性将字符串解析为int时,其字符串格式仍为

时间:2019-03-21 13:27:13

标签: c# string model int

我有一个简单的表单,它接受来自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变量串联的标点符号,是否可以不对字符串进行简单解析?或者我在这里遗漏了其他内容吗?我想避免单独解析每个问题,因为它在代码中看起来很丑陋。

谢谢。

1 个答案:

答案 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]