Прежде чем пометить его как дубликат, обратите внимание, что я прочитал все эти вопросы, включая ответ Джона Скита, но у меня все еще есть проблема. Ссылки, которые я просмотрел, и еще несколько, которые я здесь не перечисляю:
Создать экземпляр объекта с отражением и подсчетом динамических аргументов
Указание универсальному типу возвращать объект динамического тип
Я искал тот же вопрос и понял, что предоставление типа T во время выполнения невозможно, потому что общий тип T должен быть известен во время компиляции. Я понимаю это, но у меня следующий сценарий:
В основном я хочу это сделать:
public IEnumerable<T> GetListing<T>(string entityName)
{
Entity entity = new Entity { Name = entityName, Action = "Select" };
ResponsePacket<T> entityViewModel = new ResponsePacket<T>();
entityViewModel.Records = myHttpClient.GetAllEntities<T>(entity, "10", "0").Content;
return entityViewModel.Records.AsEnumerable();
}
И назовите это так:
public IEnumerable<myType> CallListing(string entityName)
{
Type myType = {get type of entityName through some method eg User}
IEnumerable<myType> result = GetListing<myType>;
return result;
}
СЕЙЧАС я прочитал, что это невозможно достичь без отражения, что означает, что мне нужно создать экземпляр GetListing<>
, а затем сообщить ему через отражение о <T>
.
Моя проблема в том, что даже если я использую отражение для создания экземпляра GetListing<myType>
и вызываю его во время выполнения через отражение, Как мне получить возвращенный результат GetListing<T>
в IEnumerable<myType>
? Будет ли отражение также предоставит результат IEnumerable<myType>
в время выполнения?
Насколько мне известно, возвращенный результат Reflection является объектом. Как мне преобразовать его в IEnumerable<myType>
, я не могу преобразовать его в IList следующим образом:
IList returnedresult = (IList)returnedResult
, потому что моей странице сетки / представления нужна модель IEnumerable<myType>
то есть IEnumerable<User>
ИЛИ IEnumerable<Roles>
, которую я надеюсь получить с помощью отражения. Я должен передать модель своему представлению @model IEnumerable<GridModel>
, где для gridmodel потребуется IEnumerable<myType>
.
Я также читал, что здесь можно использовать динамический, но я не знаю, как это сделать. Как мне достичь того, что я ищу, используя динамику? Я понятия не имею. Скажите, пожалуйста, есть ли способ сохранить возвращенный результат отраженного метода в IEnumerable<myType>
.
Если и то и другое не может быть достигнуто, скажите, пожалуйста, как я могу добиться этого другим способом.
Я не знаю Тип объекта во время компиляции, иначе будет много репликации кода, и если у меня есть 100 объектов, для которых я хочу вызвать GetListing (), мне пришлось бы написать GetUserListing, GetRolesListing, Get ... Listing ( ), а затем мне пришлось бы явно вызвать GetListing<User>
, GetListing<Roles>
из методов GetUserListing, GetRolesListing, что противоречит цели.
entityName
до вызоваCallListing
? - person   schedule 30.05.2014IEnumerable<User>
, а не простоIEnumerable
, если вы не знаете, что тип будетUser
во время компиляции? - person Ben Aaronson   schedule 30.05.2014entityName
? Можете ли вы сделать эту частьType myType= {get type of entityName through some method eg User}
дальше по стеку, а затем сделатьCallListing
универсальным и просто передать параметр универсального типа? - person   schedule 30.05.2014IEnumerable<MyType>
? - person Ben Aaronson   schedule 30.05.2014