C# 无法进行字符串比较+;使用wcf发布收集
我的应用程序使用一项服务,当用户回答问题时,该服务将向客户端发送一份问卷列表,并将相同的数据分配给模型,然后发送给服务以标记分数 在服务中,我正在执行ID检查和应答检查(字符串),但是,尽管它在调试器中显示相同的数据类型和值,但比较字符串并没有返回true。有人能带我到这里吗?谢谢C# 无法进行字符串比较+;使用wcf发布收集,c#,asp.net,wcf,asp.net-mvc-3,asp.net-mvc-4,C#,Asp.net,Wcf,Asp.net Mvc 3,Asp.net Mvc 4,我的应用程序使用一项服务,当用户回答问题时,该服务将向客户端发送一份问卷列表,并将相同的数据分配给模型,然后发送给服务以标记分数 在服务中,我正在执行ID检查和应答检查(字符串),但是,尽管它在调试器中显示相同的数据类型和值,但比较字符串并没有返回true。有人能带我到这里吗?谢谢 public double GetMarks(List<Questionnaire> qList) { var AnsLibrary = GetAnswerLibrary();
public double GetMarks(List<Questionnaire> qList) {
var AnsLibrary = GetAnswerLibrary();
double GetTotalNumberAnsquestion = qList.Count();
int numberValidCorrectAns = 0;
double result =0;
try {
if (GetTotalNumberAnsquestion > 0) {
foreach (var q in qList) {
string city =(q.UserAnsResponse);
string compare = AnsLibrary.Where(x => x.Question.QuestionId == q.QuestionId).Select(x => new { name = x.AnswerText }).SingleOrDefault().ToString();
//just a test to see if the compare is working
if (string.Compare(city, AnsLibrary[0].AnswerText) == 0) {
//for testing purpose
}
bool isAnswerExist = AnsLibrary.Any(x => x.Question.QuestionId == q.QuestionId);
if (q.isCorrectAnswer == true) {
if (isAnswerExist && AnsLibrary.Any(a => a.AnswerText == city)) {
numberValidCorrectAns++;
}
}
else {
if (isAnswerExist && !AnsLibrary.Any(x => x.AnswerText == q.UserAnsResponse)) {
numberValidCorrectAns++;
}
}
}
result = numberValidCorrectAns / GetTotalNumberAnsquestion * 100;
}
else {
throw new Exception("Unable to get User Answer Questinaire");
}
}
catch (Exception ex) {
ex.ToString();
}
return result;
}
}
public双GetMarks(列表qList){
var AnsLibrary=GetAnswerLibrary();
double GetTotalNumberAnsquestion=qList.Count();
int numberValidCorrectAns=0;
双结果=0;
试一试{
如果(GetTotalNumber问题>0){
foreach(qList中的var q){
字符串city=(q.UserAnsResponse);
string compare=AnsLibrary.Where(x=>x.Question.QuestionId==q.QuestionId)。选择(x=>new{name=x.AnswerText})。SingleOrDefault().ToString();
//只是一个测试,看看比较是否有效
if(string.Compare(city,AnsLibrary[0].AnswerText)==0){
//用于测试目的
}
bool isAnswerExist=AnsLibrary.Any(x=>x.Question.QuestionId==q.QuestionId);
如果(q.isCorrectAnswer==true){
if(isAnswerExist&&AnsLibrary.Any(a=>a.AnswerText==city)){
NumberValidans++;
}
}
否则{
if(isAnswerExist&!AnsLibrary.Any(x=>x.AnswerText==q.UserAnsResponse)){
NumberValidans++;
}
}
}
结果=numberValidCorrectAns/GetTotalNumberAnsquestion*100;
}
否则{
抛出新异常(“无法获取用户回答问题”);
}
}
捕获(例外情况除外){
例如ToString();
}
返回结果;
}
}
控制器:
public ViewResult GetMarks(List<QuestionnaireViewModel> _AnswwerQuestionaire) {
List<Questionnaire> serviceQuestionList = new List<Questionnaire>();
foreach(var questionaire in _AnswwerQuestionaire){
serviceQuestionList.Add(new Questionnaire() { QuestionId=questionaire.QuestionId, UserAnsResponse=questionaire.UserAnsResponse, isCorrectAnswer=questionaire.isCorrectAnswer});
}
var IQservice = new IQuestionService.QuestionServiceClient();
var result = IQservice.GetMarks(serviceQuestionList);
if(result > 0) {
ViewData["Marks"] = result;
} else {
ViewData["Error"] = "Unable to Marks your assesment";
}
return View(result);
}
public ViewResult获取分数(列表-问卷调查){
List serviceQuestionList=新列表();
foreach(风险值问卷调查){
serviceQuestionList.Add(新问卷(){QuestionId=questionaire.QuestionId,UserAnsResponse=questionaire.UserAnsResponse,IsCorrectResponse=questionaire.IsCorrectResponse});
}
var IQservice=new IQuestionService.QuestionServiceClient();
var result=IQservice.GetMarks(serviceQuestionList);
如果(结果>0){
ViewData[“标记”]=结果;
}否则{
ViewData[“错误”]=“无法标记您的评估”;
}
返回视图(结果);
}
数据样本:
public static List<Answer> GetAnswerLibrary() {
List<Answer> AnsLibrary = new List<Answer>();
AnsLibrary.Add(new Answer() { AnswerId = 1, AnswerText = "London", Question = new Questionnaire() { QuestionId= 11 } });
AnsLibrary.Add(new Answer() { AnswerId = 2, AnswerText = "paris", Question = new Questionnaire() { QuestionId = 22 } });
AnsLibrary.Add(new Answer() { AnswerId = 3, AnswerText = "Warsaw", Question = new Questionnaire() { QuestionId = 33 } });
AnsLibrary.Add(new Answer() { AnswerId = 4, AnswerText = "Port louis", Question = new Questionnaire() { QuestionId = 44 } });
AnsLibrary.Add(new Answer() { AnswerId = 5, AnswerText = "Berlin", Question = new Questionnaire() { QuestionId = 55 } });
return AnsLibrary;
}
//this is a hack normally will pull data from a data source like DB/CSV
public static List<Questionnaire> GetQuestionLibrary() {
List<Questionnaire> QuestionLibrary = new List<Questionnaire>();
QuestionLibrary.Add(new Questionnaire(11) { Title = "Geo", QuestionAsk = "What is the capital of England", QuestionnaireType = 1 });
QuestionLibrary.Add(new Questionnaire(22) { Title = "Geo", QuestionAsk = "What is the capital of France", QuestionnaireType = 1 });
QuestionLibrary.Add(new Questionnaire(33) { Title = "Geo", QuestionAsk = "What is the capital of Poland", QuestionnaireType = 1 });
QuestionLibrary.Add(new Questionnaire(44) { Title = "Geo", QuestionAsk = "What is the capital of Mauritius", QuestionnaireType = 1 });
QuestionLibrary.Add(new Questionnaire(55) { Title = "Geo", QuestionAsk = "What is the capital of Germany", QuestionnaireType = 1 });
return QuestionLibrary;
}
公共静态列表GetAnswerLibrary(){
List ANSBLIBRARY=新列表();
添加(新答案(){AnswerId=1,AnswerText=“伦敦”,问题=新问卷(){QuestionId=11}});
添加(新答案(){AnswerId=2,AnswerText=“paris”,问题=新问卷(){QuestionId=22}});
添加(新答案(){AnswerId=3,AnswerText=“华沙”,问题=新问卷(){QuestionId=33});
添加(新答案(){AnswerId=4,AnswerText=“Port louis”,Question=new问卷(){QuestionId=44});
添加(新答案(){AnswerId=5,AnswerText=“Berlin”,问题=新问卷(){QuestionId=55}});
归还图书馆;
}
//这是一种黑客行为,通常会从DB/CSV等数据源提取数据
公共静态列表GetQuestionLibrary(){
List QuestionLibrary=新列表();
新增(新问卷(11){Title=“Geo”,QuestionAsk=“英格兰首都是什么”,QuestionnaireType=1});
新增(新问卷(22){Title=“Geo”,QuestionAsk=“法国首都是什么”,QuestionnaireType=1});
添加(新问卷(33){Title=“Geo”,QuestionAsk=“波兰首都是什么”,QuestionnaireType=1});
添加(新问卷(44){Title=“Geo”,QuestionAsk=“毛里求斯首都是什么”,QuestionnaireType=1});
新增(新问卷(55){Title=“Geo”,QuestionAsk=“德国首都是什么”,QuestionnaireType=1});
返回问题库;
}
我设法解决了这个问题,下面是我所做的修改。这有点奇怪
public double GetMarks(List<Questionnaire> qList) {
var AnsLibrary = GetAnswerLibrary();
double result = 0;
double TotalNumberofQuestion = qList.Count();
int UserValidAnswer = 0;
if(TotalNumberofQuestion >0) {
var filterQuestionaire = qList.Where(q => q.UserAnsResponse != null).ToList();
foreach (var q2 in filterQuestionaire) {
bool checkOnlyAnswerQuestion = AnsLibrary.Any(x => x.Question.QuestionId == q2.QuestionId);
if(checkOnlyAnswerQuestion) {
string city = (q2.UserAnsResponse).Trim();
string city2 = AnsLibrary.Where(x => x.Question.QuestionId == q2.QuestionId).Select(t => t.AnswerText).SingleOrDefault().Trim();
bool checkuserAnswer = (city == city2) ;
if(q2.isCorrectAnswer == true && checkuserAnswer == true){
UserValidAnswer++;
}
if(q2.isCorrectAnswer == false && checkuserAnswer == false) {
UserValidAnswer++;
}
}
}
result = UserValidAnswer / TotalNumberofQuestion * 100;
}
return result;
}
public双GetMarks(列表qList){
var AnsLibrary=GetAnswerLibrary();
双结果=0;
double TotalNumberofQuestion=qList.Count();
int UserValidAnswer=0;
如果(TotalNumberofQuestion>0){
var filterQuestionaire=qList.Where(q=>q.UserAnsResponse!=null).ToList();
foreach(筛选问卷中的变量q2){
bool checkOnlyAnswerQuestion=AnsLibrary.Any(x=>x.Question.QuestionId==q2.QuestionId);
如果(仅勾选回答问题){
字符串city=(q2.UserAnsResponse.Trim();
字符串city2=AnsLibrary.Where(x=>x.Question.QuestionId==q2.QuestionId)。选择(t=>t.AnswerText)。SingleOrDefault().Trim();
bool checkuserAnswer=(city==city2);
如果(q2.isCorrectAnswer==true&&checkuserAnswer==true){
UserValidAnswer++;
}
如果(q2.isCorrectAnswer==false&&checkuserAnswer==false){
UserValidAnswer++;
}
}
}
结果=用户有效回答/问题总数*100;
}
返回结果;
}
它可能不起作用的一个原因是您“总是”