Я пытаюсь преобразовать List
из System.Object
объектов в List
объектов строго типизированного типа.Преобразование списка общих объектов в список не общего типа
Здесь ошибка я получаю:
Объект типа «System.Collections.Generic.List`1 [System.Object]» не может быть преобразован в тип «System.Collections.Generic.List `1 [TestApp.Tsc_Mrc_Step]».
Цель состоит в том, что я пишу уровень бизнес-данных для своего проекта, что все, что вам нужно сделать, это назвать свой класс и свойства тем же именем, что и сущности в вашей базе данных, и слой данных будет автоматически заполнять ссылочные таблицы как типы, объявленные в классе.
В слое бизнес-данных используются отражения, генерики и объекты, чтобы справиться со всем этим.
Ниже приведен код, в котором я попытался поместить список объектов в список известных типов. Дело в том, что объект является известным типом, но передаю его как объект ... Как преобразовать его в известный тип, не зная, что это такое?
bool isCoollection = false;
Type t = GetTypeInsideOfObjectByTypeName(o, tableName, out isCoollection);
List<object> objectColl = new List<object>();
object obj = Activator.CreateInstance(t);
if (obj != null)
{
PropertyInfo[] objectProps = obj.GetType().GetProperties();
foreach (PropertyInfo op in objectProps)
{
if (HasColumn(reader, op.Name))
{
op.SetValue(obj, reader[op.Name]);
}
}
if (isCoollection)
{
objectColl.Add(obj);
}
}
if (isCoollection)
{
IEnumerable<object> objs = objectColl.AsEnumerable();
SetObject(o, objs);
}
else
{
SetObject(o, obj);
}
Вот SetObject:
public static void SetObject(object parentObject, object newObject)
{
PropertyInfo[] props = parentObject.GetType().GetProperties();
string typeName = newObject.GetType().Name;
foreach (PropertyInfo pi in props)
{
if (pi.PropertyType.Name.ToLower() == typeName.ToLower())
{
pi.SetValue(parentObject, newObject);
}
else if (!pi.PropertyType.IsValueType && !pi.PropertyType.Namespace.ToLower().Contains("system"))
{
SetObject(pi.GetValue(parentObject), newObject);
}
}
}
Можете ли вы опубликовать, что вы попробовали? –
Вы можете добавить код, который используете (или, по крайней мере, фрагменты, ссылающиеся на строго типизированный список. –
Использование reflection _and_ generics вместе означает, что вы не должны использовать _either_. –