Я думал, что смогу сделать это намного проще, чем кажется.
Мне нужен наиболее эффективный способ, позволяющий получить все экземпляры определенного типа в графе объектов.
Я начал использовать рефлексию, чтобы пройтись по свойствам объекта, отыскивая экземпляры этого типа, а затем продолжая работу со всеми другими сложными типами и коллекциями. Это начинает ощущаться как большая работа, а также что-то вроде того, что кто-то должен был делать в прошлом. Поэтому, прежде чем взять на себя нагрузку по работе и тестированию, я подумал, что мне следует спросить, не хватает ли мне быстрого выигрыша в рамках или есть какие-то рекомендации для библиотек по выполнению такого рода работы.
Почему я хочу это сделать?
У меня есть тип, из которого получены другие. Этот тип имеет общие свойства и, что более важно, конкретный тип, идентифицирующий ошибки, HasErrors. Этот тип используется при построении моделей. Каждая модель отличается. Некоторые простые и мелкие, некоторые сложные и глубокие. Как правило, каждый сложный узел будет коллекцией или пользовательским типом, производным от этого типа. Мне нужен быстрый способ обойти любой их экземпляр, проверяя все свойства HasErrors. Любой экземпляр true указывает на ошибку модели.
Model
CustomerId (int)
CustomerDetails : MyType
Name (string)
DoB (DateTime)
Addresses (Collection<Address : MyType>)
[Line1 (string)
Line2 (string)]
Надеюсь, этот вид иллюстрирует.