FirstOrDefault () возвращает первую букву строки - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть объект людей

        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 (Тим, Кори)

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'

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Вы звоните .FirstOrDefault() на FirstName, что string. Это приведет к вызову .FirstOrDefault() в реализации IEnumberable<char>. Это приведет к возврату первого символа или символа по умолчанию в этом string.

Числовое значение 84 отображает значение ASCII для T. http://www.rapidtables.com/code/text/ascii-table.html

0 голосов
/ 14 сентября 2018

Да - string - это, по сути, IEnumerable<char>, поэтому, когда вы звоните FirstOrDefault(), вы возвращаете первое char в IEnumerable.

0 голосов
/ 14 сентября 2018

Строки - это массивы символов, которые можно перечислить с помощью Linq.

FirstOrDefault возвращает первый элемент в списке или ноль.
В этом случае первый символ в массиве ['T',' i ',' m '] - это' T '.

Я думаю, это то, что вы хотели написать:

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

Примечание: Использование FirstOrDefault может вернуть ноль, чтовызвать NullReferenceException, если совпадений нет.

В качестве альтернативы:

var match = people.FirstOrDefault(n => n.FirstName == FirstName && n.LastName == LastName);
return (match == null) ? "" : match.FirstName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...