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

C# FirstOrDefault()返回字符串的第一个字母,c#,linq,lambda,C#,Linq,Lambda,我有个人反对 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 = "Baggin

我有个人反对

        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" });
我试图通过传递FirstName和LastName来查询它,Tim,Corey

return people.Where(names => names.FirstName == FirstName && names.LastName == LastName).FirstOrDefault().FirstName;
这会将输出返回为

"Tim"
当我在最后加上。first或default。它带来了奇怪的输出

return people.Where(names => names.FirstName == FirstName && names.LastName == LastName).FirstOrDefault().FirstName.FirstOrDefault();

84 'T'
谁能解释一下产出是如何产生的

84'T'


字符串是可以由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;
您正在调用FirstName上的.FirstOrDefault,它是一个字符串。这将导致在IEnumberable实现上调用.FirstOrDefault。这将导致返回该字符串中的第一个或默认字符

数值84显示T的ASCII值。

是-字符串本质上是IEnumerable,因此当您调用FirstOrDefault时,您将返回IEnumerable中的第一个字符。

字符串是IEnumerable。这是因为当您将FirstOrDefault添加到属于string类型的FirstName时,它将从Strings返回第一个字符。您还希望得到什么结果?你的名字叫蒂姆,你还需要什么?怎么会有84个呢?如果我只得到T就好了。因为T是一个字符,它显示了T的ASCII值,即84。ASCII码:谢谢@Michael。我已经在回答中添加了这一点。有谁能向我解释我是怎么错的/为什么投反对票?