public IList <TOut> GetObjectList <T, TOut>(IEnumerable <Filter> filters = null, bool loadChild = false, bool getDeleted = false) where T : BaseEntity, new() where TOut : BaseEntityObject, new() { if (!typeof(T).IsSubclassOf(typeof(BaseEntity))) { throw new ArgumentException("T", "не является наследником " + typeof(BaseEntity).Name); } if (!typeof(TOut).IsSubclassOf(typeof(BaseEntityObject))) { throw new ArgumentException("TOut", "не является наследником " + typeof(BaseEntityObject).Name); } var res = new List <TOut>(); var dtos = _provider.GetObjectList <T>(filters, loadChild, getDeleted); if (dtos == null) { return(res); } var methodName = GetConverterMethodName(typeof(TOut)); var method = GetMethod(typeof(T), methodName); res.AddRange(dtos.Select(i => InvokeConverter <T, TOut>(i, method))); return(res); }