Итак, у меня есть класс, который является общим, и может быть, внутри его собственного метода, создать собственный экземпляр с другим родовым типом, который получается через рефлекцию ,C# Создание неизвестного типа общего типа во время выполнения
Это важно, потому что этот репозиторий сопоставляет T с таблицей базы данных [это ORMish, которую я пишу], и если класс, представляющий T, имеет коллекцию, представляющую таблицу ANOTHER, мне нужно иметь возможность указать ее и передать ее репозиторий [ala Inception].
Я предоставляю метод на случай, если вам будет легче увидеть проблему.
private PropertiesAttributesAndRelatedClasses GetPropertyAndAttributesCollection()
{
// Returns a List of PropertyAndAttributes
var type = typeof(T);
//For type T return an array of PropertyInfo
PropertiesAttributesAndRelatedClasses PAA = new PropertiesAttributesAndRelatedClasses();
//Get our container ready
PropertyAndAttributes _paa;
foreach (PropertyInfo Property in type.GetProperties())
//Let's loop through all the properties.
{
_paa = new PropertyAndAttributes();
//Create a new instance each time.
_paa.AddProperty(Property);
//Adds the property and generates an internal collection of attributes for it too
bool MapPropertyAndAttribute = true;
if (Property.PropertyType.Namespace == "System.Collections.Generic")
//This is a class we need to map to another table
{
PAA.AddRelatedClass(Property);
//var x = Activator.CreateInstance("GenericRepository", Property.GetType().ToString());
}
else
{
foreach (var attr in _paa.Attrs)
{
if (attr is IgnoreProperty)
//If we find this attribute it is an override and we ignore this property.
{
MapPropertyAndAttribute = false;
break;
}
}
}
if (MapPropertyAndAttribute)
PAA.AddPaa(_paa);
//Add this to the list.
}
return PAA;
}
Так дали GenericRepository, и я хочу сделать GenericRepository как бы я это сделать? линия мне нужно заменить чем-то, что работает,
// var x = Activator.CreateInstance("GenericRepository", Property.GetType().ToString());
Как это свойство (один из типов 'System .Collections.Generic'), объявленный в коде C#? Является ли его аргумент типа «» тем же, что и у «GenericRepository », который владеет свойством? –
dasblinkenlight
Нет, в основном это всего лишь общая коллекция другого класса как свойство класса. Т.е. класс Учителя имеет список классов классов. Репозиторий получает класс преподавателя и должен также обрабатывать класс классов, но поскольку он действительно получает T, он должен выяснить, что он должен обрабатывать, используя отражение. – Jordan
Итак, это свойство в классе 'Учитель', объявленном как« Список Классы {/ * геттер и/или сеттер * /} '? Не будет ли 'Activator.CreateInstance (Property.GetType()) работать? –
dasblinkenlight