Я пытаюсь построить программу для решения любого вопроса. Вот что я сделал:
data.content = "1. The word 'virile' means what?\na. Like a rabbit\nb. Like a man\nc. Like a wolf\nd. Like a horse\n" # I'm defining the question here.
Вот код, чтобы узнать, каков ответ на вопрос, который мы определили:
if (data.Content.Contains(question))
{
switch (question)
{
case "The word 'virile' means what?":
ans = " Like a man ";
break;
case "is he a man ?":
ans = "No";
break;
case "Can you speak ?":
ans = "hello";
break;
Теперь к решающей части:
var inputSplit = data.Content.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);
theanswer = new string(inputSplit.Where(x => x.Contains(ans)).Select(x => x[0]).ToArray()[0], 1);
Reply(theanswer);
Проблема в том, что он отображает «ноль» в качестве ответа, потому что он не входит в цикл переключения. Любая помощь?
data.content
и data.Content
- две разные вещи. убедитесь, что вы правильно настраиваете и получаете content
. Попробуйте отладить программу и проверьте поле содержимого перед оператором if.
Проверьте наличие пробелов.
Придирка к терминологии: это не «петля переключателя», это «блок переключателя».
data.Content. он получает вопрос с веб-сайта.
@rami_ahmed, хорошо, а что такое тип, когда вы их получаете? объект?
@thesystem строка
@rami_ahmed Если это уже строка, вам не нужно произносить data.Content
, просто произносите data = "1. The word ..."
и т. д., чтобы назначить вашу строку для data
. Затем в вашем if-else скажите if (data.Contains(...
- так что оставьте .Content
, если это уже строка. Я почти уверен, что вы не можете использовать .Content
на струне.
хорошо, но почему это дает мне ноль? он не входит в переключатель, потому что я определяю ответ на каждый вопрос
@rami_ahmed, как вы определили ans
и question
? Покажите все его определение.
А как заливается question
?? И, самое главное, отладчиком пользовались? Это ваш лучший друг и гораздо более ценный, чем все, что SO мог бы предложить! Плюс: Куда пропал 1.
?
публичная строка и {получить; набор; }
@Taw он заполнен из (data.Content), который поступает с веб-сайта ..
@rami_ahmed, мы нигде не можем увидеть, что вы назначаете question
на data.Content
. Как это выглядит? Нам нужно увидеть каждую важную часть кода :)
Пожалуйста, постарайтесь сосредоточиться на ТАК. Также постарайтесь ответить на все поставленные вам вопросы. Где сделал на 1. go
?
@rami_ahmed Я не могу сейчас говорить, но если вы дополните свой вопрос всем кодом, я посмотрю на него! :)
@Taw это не большая идея 1. Я могу удалить это, я просто скопировал / вставил вопрос о дыре
Гм, что значит ?? Вам абсолютно необходимо опубликовать настоящий код. Если вы допустили ошибку, исправьте ее, иначе мы все увидим призрака. Также мы запросили только статус назначения question
. Pastebin - еще один внешний ресурс.
question = data.Content; # От (data.Content, у меня вопрос)
@rami_ahmed хорошо, я посмотрел код. Допустим, дело обстоит так: «Слово« мужественный »означает что». Что вы хотите, чтобы произошло и что будет на выходе?
@rami_ahmed Думаю, я нашел вашу проблему и дал ответ. Посмотрите ниже, чтобы увидеть это. Я думаю, это потому, что ваша собственность ans
- это null
Строка начинается с «1. Что означает слово« мужественный »?», но вы сравниваете с "Что означает слово" мужественный "?" Опечатка?
Я думаю, что это проблема, но это слишком долго, чтобы быть комментарием ... Я удалю, если это не ответ.
Когда вы создаете свойство вроде этого: public string ans { get; set; }
, вы не устанавливаете его ни на что, поэтому ans
на самом деле является null
.
Это вызывает проблему во второй последней строке: theanswer = new string(inputSplit.Where(x => x.Contains(ans)).Select(x => x[0]).ToArray()[0], 1);
. В середине этой строки вы проверяете, есть ли ... x.Contains(ans))
.
Если вы измените public string ans { get; set; }
на public string ans = ""
, он никогда не будет null
.
Я не знаю, правильно ли мое объяснение, но установка ans
на ""
вместо того, чтобы использовать его как свойство, заставила меня работать. Попробуйте и сообщите, если не сработает :)
он должен обратиться к тому же самому случаю вопроса, чтобы получить от него ответ. но когда я его отлаживаю. он пропускает переключатель, я не знаю почему
@rami_ahmed, хорошо, мне жаль это слышать. Если он пропускает переключатель, это потому, что ваш оператор if имеет значение false, что означает, что data.Content
не содержит question
. Поэтому я бы предположил, что data.Content
равен нулю. Обновлено: Если вы можете опубликовать, как вы получаете data
, то мы можем продолжить работу оттуда.
@rami_ahmed Обновлено: Либо data.Content
не содержит question
, либо ваши кейсы не соответствуют тому, что содержится в question
. Вам нужен блок переключателей по умолчанию, который выполняется, если ни один из ваших случаев не совпадает.
Мне очень жаль, что я ответил позже data.Content, когда я его отлаживаю, он возвращает true в if-выражении. возможно, проблема, как вы сказали, в самом деле. хотя, когда я делаю это с помощью оператора if-else if. работает нормально. :(
@rami_ahmed Не беспокойтесь о позднем ответе. Если он возвращает true в операторе if и отлично работает без оператора switch, значит, что-то не так с оператором switch и / или case! :-)
Привет . Я обнаружил проблему в упомянутых вами случаях. как я могу заставить его игнорировать пробелы и номер вопроса, чтобы случаи легко сопоставлялись
@rami_ahmed Извините за поздний ответ. Приятно слышать, что ты это нашел. Я не совсем понимаю, что вы имеете в виду, не могли бы вы уточнить, что именно вы хотите?
Нам нужно знать, как выглядит / выглядит
data
. Не могли бы вы опубликовать код для этого?