#c# #linq #generics #dynamic
#c# #linq #общие положения #динамический
Вопрос:
Мне нужно создать метод, который принимает неизвестный тип, а затем позже использует этот тип для доступа к объекту.
Немного подробнее. У меня есть DevEx grid, и я использую GetRow для получения записи. GetRow должен иметь тип объекта класса Linq для доступа к свойствам записи. Я пытаюсь создать универсальный метод, который позволит мне передавать тип объекта Linq, а затем динамически приводить результат из GetRow к этому объекту. Затем я получу столбец fieldname для доступа к свойствам следующим образом (ObjectType — это неизвестный тип):
void DoGrid (GridView gv, objectType)
{
PropertyInfo[] properties = objectType.GetProperties();
foreach (GridColumn col in gv.Columns)
{
if (col.Visible)
{
PropertyInfo property = properties.Where(prop => prop.Name == col.FieldName).FirstOrDefault();
...
}
}
}
Комментарии:
1. Я просто хочу передать тип. Я не думаю, что var будет работать в приведенном выше примере.
Ответ №1:
Вы просто ищете способ сделать это с помощью дженериков? Возможно, что-то вроде:
void DoGrid<T>(GridView gv)
{
PropertyInfo[] properties = typeof(T).GetProperties();
foreach (GridColumn col in gv.Columns)
{
...
}
}
и тогда вы бы использовали это как:
DoGrid<MyClassFullOfProperties>(myGridView);
Комментарии:
1. на 40 секунд быстрее, чем у меня.
2. Да, это то, что я искал. Я пытался сделать это в конструкторе класса, но возникли проблемы с передачей его этому частному методу. Я полагаю, я просто сделаю описанный выше метод общедоступным.
3. Теперь я получаю сообщение об ошибке «System. Отражение. PropertyInfo[] не содержит определения для Where
4. вероятно, вам нужен
using System.Linq;
в верхней части вашего файла кода..Where(...)
это метод расширения.5. Мой плохой … перемещал материал. Спасибо