Как я могу преобразовать IEnumerable
в IEnumerable<T>
, если T не известен до времени выполнения?
У меня есть метод, которому абсолютно необходим IEnumerable<T>
, где T неизвестно до тех пор, пока время выполнения и T
не должно быть фактическим типом, а не типом предка, подобным объекту .
Бьюсь об заклад, API отражения допускает нечто подобное, но я точно не знаю, как.
Обновление
Я могу получить объект типа, подобный этому:
var first = results.Cast<object>().FirstOrDefault();
if (first != null)
{
var type = first.GetType();
}
Update2
"Метод", на который я ссылался, на самом деле был установщиком свойства ItemSrid WPF DataGrid.
У меня проблема в том, что если я не передам IEnumerable<T>
, строки, сгенерированные в Datagrid, будут пустыми, как если бы он не отражал свойства T
и не может генерировать столбцы.
Даже использование этого кода имеет такой нежелательный эффект:
public CollectionResultWindow(IEnumerable results)
{
Contract.Requires(results != null, "results is null.");
InitializeComponent();
DataContext = this;
var first = results.Cast<object>().FirstOrDefault();
if (first != null)
{
Type type = first.GetType();
var castMethod = typeof(Enumerable).GetMethod("Cast").MakeGenericMethod(type);
dynamic genericResults = castMethod.Invoke(null, new[] { results });
Results = genericResults; // Results is a dependency property that DataGrid.ItemSource is bound to.
}
}