Как я могу уговорить объект на IList <T>? - PullRequest
0 голосов
/ 17 ноября 2009

Я использую отражение вместе с linq.Dynamic, и у меня возникла небольшая проблема с созданием запроса, который должен получить IQueryable<T> из IList<T> или ISet<T>, когда у меня есть объект.

Сначала я подумал, что смогу написать небольшой вспомогательный метод:

object Helper<T>( IList<T> list, string query, param object[] values )
{
... do query and return result.
}

К сожалению, компилятору нужно вывести аргумент T, чего он не может сделать при передаче объекта.
Есть ли простой способ обойти это? Я пытаюсь избежать динамического вызова этой вспомогательной функции.

EDIT: У меня есть объект Domain, который в настоящее время представляет собой несколько коллекций IList, и я пытаюсь выполнить запрос к этому классу, чтобы найти подходящий объект для отображения на экране. В основном у меня есть экран 10 и xpathish строка "FruitBasket / Fruit [Ripe == true] / color" Итак, я знаю, что Fruit - это IList в моем коде отражения. Я инспектирую свойство, чтобы выяснить, реализует ли оно IList, и теперь я нахожусь в точке, где мне нужно запросить эту коллекцию, чтобы выбрать объекты Fruit.Ripe == true. Для этого мне нужно привести IQuerable

1 Ответ

4 голосов
/ 17 ноября 2009

Если у вас есть только object, как вы ожидаете, что компилятор узнает, каким должен быть T?

Вы не показали, как вы пытаетесь вызвать этот метод ... делайте вы знаете (во время компиляции), каким должен быть тип T (даже с точки зрения другого введите параметр вызывающего метода)? Если нет, то придется вызывать его динамически.

Это object на самом деле IList<T> для некоторых T? Что может произойти, если он реализует IList<T> для двух разных типов?

Я предлагаю вам сделать шаг назад и выяснить, какая информация действительно известна во время компиляции, а какая - только во время выполнения. При статическом вызове универсального метода потребуется, чтобы вы знали аргументы типа во время компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...