Синтаксический анализ строки как int со свойством «Model.x» в цикле for остается в формате string

#c# #string #model #int

#c# #строка #Модель #int

Вопрос:

У меня есть простая форма, которая принимает число из выбора переключателем (1-5) из 11 вопросов и отправляет значения в базу данных в виде данных 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. оператор return должен находиться вне цикла for

2. Если вы опубликуете определение Q5 из своей модели, я могу предложить лучший способ сделать это.

3. @apomene Моя ошибка, изначально это было вне цикла, и я, должно быть, случайно поместил его туда при написании этого вопроса. Исправляем это сейчас!

4. @RobinBennett Q5 или любой из Q будет числом 1-5 (в зависимости от выбора пользователем переключателя) в формате varchar (10) в моей модели.

5. Хорошо, я добавил раздел к своему ответу — это помогает?

Ответ №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]