C# 在IEnumerable上使用带LINQ的Equals
此代码:C# 在IEnumerable上使用带LINQ的Equals,c#,linq,C#,Linq,此代码: var allSubjectsForAStudent = GetAllSubjects<Subject>(studentId); “subjectName”是方法将接收的参数 当这行执行时,我得到“对象未设置为对象实例”错误 所以我要做的是不区分大小写的搜索,当有多个项时返回第一个项,当没有项时返回一个空集合 有什么线索吗 编辑1 答案表明,第一个集合中可能有一个条目具有“null”。当观察结果为真时,程序确保“主题名称”不能为空值。希望这有帮助 提前感谢。您可以尝
var allSubjectsForAStudent = GetAllSubjects<Subject>(studentId);
“subjectName”是方法将接收的参数
当这行执行时,我得到“对象未设置为对象实例”错误
所以我要做的是不区分大小写的搜索,当有多个项时返回第一个项,当没有项时返回一个空集合
有什么线索吗
编辑1
答案表明,第一个集合中可能有一个条目具有“null”。当观察结果为真时,程序确保“主题名称”不能为空值。希望这有帮助
提前感谢。您可以尝试:
var studentSubjects = allSubjectsForAStudent.Where(s => !string.IsNullOrWhiteSpace(s.Name) && s.Name.ToUpperInvariant() == subjectName.ToUpperInvariant()).FirstOrDefault();
这会将studentSubjects
设置为null,或者将IEnumerable
中匹配的第一个实例设置为null
当您调用时,将收到一个NullReferenceException
s.Name.Equals(subjectName)
对于s.Name为空的对象,它将:
if(allSubjectsForAStudent!=null && !string.IsNullorEmpty(subjectName))
var studentSubjects = allSubjectsForAStudent.Where(s => s.Name.Equals(subjectName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
集合中是否有名为
null
的项?这是最有可能的原因。我很想以复制品的形式结束。。。但我不得不告诉你,你没有向我们展示足够的代码来诊断问题。问题在于你是如何得到你的科目的。有些东西是null
,但我们无法知道,因为您没有向我们展示任何代码。Rosenheimer,这会在不匹配时给出“序列不包含元素”。我修复了它,我应该使用FirstOrDefault,而不是仅使用First。现在应该可以工作了。
s.Name.Equals(subjectName)
if(allSubjectsForAStudent!=null && !string.IsNullorEmpty(subjectName))
var studentSubjects = allSubjectsForAStudent.Where(s => s.Name.Equals(subjectName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();