Рейтинг:
2
F-ES Sitecore
Вместо того чтобы пытаться использовать LINQ без причины (Если вы думаете, что он будет работать лучше, подумайте еще раз, LINQ часто медленнее), вам лучше улучшить свое понимание основ.
List<Type> selectedList = new List<Type>();
foreach (Type type in allTypes)
{
if (type != null && type.BaseType != null && type.BaseType.Name == "MyBASETYPE")
{
inheritedList.Add(type);
}
}
Как уже упоминалось в другом решении, в зависимости от вашей версии .net вы также можете использовать "?."
Рейтинг:
0
Eric Lynch
Не уверен, чего ты ждешь от меня. inheritedList
в вашем примере. Кроме того, я полагаю, что вы ищете следующее (чтобы быть полностью эквивалентным):
var selectedList = allTypes
.Where(type => type != null && type.BaseType != null &&
type.BaseType.Name == "MyBASETYPE")
.ToList();
Graeme_Grant
.ToList()
требуется только в том случае, если требуется ранняя оценка. Кроме того, вы можете упростить свой ответ на:
var selectedList = allTypes
.Where(type => type?.BaseType?.Name == "MyBASETYPE");
Mycroft Holmes
И снова я кое - что узнаю-ты даже не представляешь, через какое дерьмо мне пришлось пройти, ловя нули!
Graeme_Grant
Это определенно экономящий время рефакторинг! :)
Eric Lynch
Правильно по обоим пунктам...и стоит указать на это другим читателям.
Что касается моего решения, то я знаю о новых операторах. Я подумывал использовать их в своем решении, но решил не делать этого. Я хотел научить его преобразовывать свой цикл, не беспокоя его необходимостью также изучать новые языковые функции. Предоставленный код был настолько похож на его оригинал, насколько я мог его сделать, чтобы проиллюстрировать различия между использованием foreach и LINQ.
Я также осознаю опасность преждевременной материализации. Однако, по его примеру, selectedList был специально объявлен список, который является, почему я включил в список. Для других читателей, для получения дополнительной информации об опасностях преждевременной материализации, пожалуйста, ознакомьтесь с моей предыдущей статьей:
https://www.codeproject.com/Articles/1236958/LINQ-Part-A-Deep-Dive-into-IEnumerable
Причина, по которой я написал эту статью, состояла в том, чтобы лучше объяснить IEnumerable и, надеюсь, помочь людям избежать ошибки всегда лавировать на ToList...или что-то еще, что могло бы вызвать преждевременную материализацию.
На несвязанной ноте я был удивлен, увидев оценку в две звезды на этом решении. Не знаю, что я сделал, чтобы заслужить это :)
George Swan
Отличный ответ. Не то чтобы это имело большое значение, но разве ваше решение не является операцией или?