C# 将字符串解析为带“quot”的int;型号x“;for循环中的属性仍为字符串格式

C# 将字符串解析为带“quot”的int;型号x“;for循环中的属性仍为字符串格式,c#,string,model,int,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;

我有一个简单的表单,它接受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(型号Q5,输出温度)
我能够很好地解析数据。我的控制台显示循环将
问题
变量保持为带有引号的
Model.Qx“
,最终导致总和为
0
。我也尝试过使用
Int32.TryParse(),除了处理错误之外,没有任何区别

如果字符串包含与
i
变量串联的标点符号,或者我在这里遗漏了其他内容,那么它就不能被解析吗?我希望避免单独解析每个问题,因为它在代码中看起来相当难看


提前感谢。

您的问题是,您试图使用同名字符串访问变量。这是行不通的,就像名字不是你一样

如果您的模型具有许多具有类似名称的属性,则可以编写一个函数在它们之间切换:

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]

返回语句应该在for loop之外如果您发布模型中的Q5定义,我可以建议一种更好的方法来执行它。@apomene我的错,它最初在循环之外,我一定是在写这个问题时意外将它放在那里的。现在修好它@RobinBennett Q5或任何Q在我的模型中都是varchar(10)格式的数字1-5(取决于用户单选按钮选择)。好的,我在我的答案中添加了一个部分-这有帮助吗?