繁体   English   中英

FirstOrDefault()返回字符串的第一个字母

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM