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。我已经在回答中添加了这一点。有谁能向我解释我是怎么错的/为什么投反对票?