本文共 3931 字,大约阅读时间需要 13 分钟。
我们在一级考试系统维护的代码检查中,有一个地方一直有警告。Use '.Any()' to test whether this 'IEnumerable System.Data.DataRow ' is empty or not.
警告位置:
#region 程金鹏 页码格式 2015年12月9日15:58:35 ////// 页码格式 /// /// 题库实体 public void PageNumberHeaderFormatH(WordQuestionEntity wordinfo, System.Data.DataTable dt) { WordQuestionRecordEntity studentrecord = new WordQuestionRecordEntity(); DataRow[] drs_word = dt.Select("QuestionFlag='页码格式'"); if (allRange.Sections.Count != 0)//警告位置 { if (allRange.Sections[1].Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Text == "\r" || allRange.Sections[1].Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Text.Trim().ToString() == "") { studentrecord.TimeStamp = MyInfo.TimeTamp(); //如果表格不存在,则判分为0 studentrecord.StudentID = FrmLogin.studentID; studentrecord.ExamAnswer = "空答案"; studentrecord.Fration = "0"; //将答题记录送到数据库 for (int i = 0; i < dt.Rows.Count; i++) { if (drs_word.Count() == 0) { return; } if (!drs_word.Any()) { return; } studentrecord.QuestionID = Convert.ToDouble(drs_word[0]["QuestionID"]); } WordLoadinfo.list.Add(studentrecord); } else { studentrecord.TimeStamp = MyInfo.TimeTamp(); //传递考生ID进studentrecord实体 studentrecord.StudentID = FrmLogin.studentID; //将考生答案传递给studentrecord实体 studentrecord.ExamAnswer = allRange.Sections[1].Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Text.Trim().ToString(); //将试题的ID选择出来 if (drs_word.Count() == 0)//警告位置 { return; } studentrecord.QuestionID = Convert.ToDouble(drs_word[0]["QuestionID"]); //判分 WordLoadinfo.list.Add(gonggong.getStudentRecord(drs_word, studentrecord)); } } else { studentrecord.TimeStamp = MyInfo.TimeTamp(); //如果表格不存在,则判分为0 studentrecord.StudentID = FrmLogin.studentID; studentrecord.ExamAnswer = "空答案"; studentrecord.Fration = "0"; //将答题记录送到数据库 if (drs_word.Count() == 0)//警告位置 { return; } studentrecord.QuestionID = Convert.ToDouble(drs_word[0]["QuestionID"]); WordLoadinfo.list.Add(studentrecord); } } void IWordQuestionFlag.SwitchQuestionFlag(WordQuestionEntity wordinfo, System.Data.DataTable dt) { throw new NotImplementedException(); } #endregion
在代码中,凡是需要在dtatable判断是否有数据的是否,都会提示警告。
警告百度,我们对警告位置if (drs_word.Count() == 0)//警告位置{ return;}
进行了如下更换就不告警了:
if (!drs_word.Any()) { return; }
对Any()用法的官方文档:
1、 官网查询。大概意思就是如果有数据则返回true ,否则返回false。
2、 通过查看Any方法的源码,相信大家看了源码也能理解一二:public static bool Any(this IEnumerable source) { if (source == null) { throw Error.ArgumentNull("source"); } using (IEnumerator enumerator = source.GetEnumerator()) { if (enumerator.MoveNext()) { return true; } } return false; }
我们可以发现,源码的大概意思就是通过计数器的移动,从零开始移动,如果发现next后为有值,则为true,否则表示database中为空,返回false。
至于现在我们为什么要用any()来替代count的方式,我还么有弄明白。如果大家有过类似经验的可以在评论里回复。