【问题标题】:Parsing string as int with "Model.x" property in for loop remains in string format在 for 循环中使用“Model.x”属性将字符串解析为 int 仍为字符串格式
【发布时间】:2019-03-21 13:27:12
【问题描述】:

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

提前致谢。

【问题讨论】:

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

标签: c# string model int


【解决方案1】:

你的问题是你试图通过使用同名的字符串来访问一个变量。这不起作用,就像名称 gitgecko 不是 一样。

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

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]

【讨论】:

    猜你喜欢
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多