[英]FirstOrDefault() returns first letter of the string
我有一个人反对
people.Add(new Person { FirstName = "Tim", Id = 1, LastName = "Corey" });
people.Add(new Person { FirstName = "Sue", Id = 2, LastName = "Storm" });
people.Add(new Person { FirstName = "Bilbo", Id = 3, LastName = "Baggins" });
我正在尝试通过传递名字和姓氏(蒂姆,科里)来查询它
return people.Where(names => names.FirstName == FirstName && names.LastName == LastName).FirstOrDefault().FirstName;
这将输出返回为
"Tim"
当我在末尾添加.FirstOrDefault()时。 它带来了奇怪的输出为
return people.Where(names => names.FirstName == FirstName && names.LastName == LastName).FirstOrDefault().FirstName.FirstOrDefault();
84 'T'
谁能解释输出是如何产生的。
84'T'
您正在对FirstName
调用.FirstOrDefault()
,它是一个string
。 这将导致在IEnumberable<char>
实现上调用.FirstOrDefault()
。 这将导致返回该string
的第一个字符或默认字符。
数值84
显示T
的ASCII值。 http://www.rapidtables.com/code/text/ascii-table.html
字符串是字符数组,Linq可以枚举。
FirstOrDefault返回列表中的第一项,或者为null。
在这种情况下,数组['T','i','m']中的第一个字符为'T'。
我认为这是您要写的内容:
return people.First(names => names.FirstName == FirstName && names.LastName == LastName).FirstName;
注意:使用FirstOrDefault可以返回null,如果没有匹配项,则将导致NullReferenceException。
或者:
var match = people.FirstOrDefault(n => n.FirstName == FirstName && n.LastName == LastName);
return (match == null) ? "" : match.FirstName;
是的- string
本质上是IEnumerable<char>
因此,当您调用FirstOrDefault()
,您将返回IEnumerable
的第一个char
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.