#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]